您的位置:首页 > 数据库

PL/SQL语言基础

2009-04-28 23:44 295 查看
PL/SQL语言基础
/********************************数据类型*************************************/
%rowtype (行对象类型使用)
变量名 表名%rowtype
%type
变量名 表名.列名%TYPE=默认值
在使用dbms_output.put_line()打印输出内容时需先设置set serveroutput on参数。
/*****************例子******************/
1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 begin

7 a:=10;

8 b:='Axiao';

9 select empno into no from emp where empno=7369;

10 select * into e from emp where empno=7788;

11 dbms_output.put_line(a);

12 dbms_output.put_line(b);

13 dbms_output.put_line(no);

14 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

15* end;

16 /

PL/SQL 过程已成功完成。

SQL> set serveroutput on

SQL> /

10

Axiao

7369

7788,SCOTT,ANALYST

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 begin

9 a:=10;

10 b:='Axiao';

11 select empno into no from emp where empno=7369;

12 select * into e from emp where empno=7788;

13 t_s(3):=10;

14 t_s(5):=20;

15 dbms_output.put_line(a);

16 dbms_output.put_line(b);

17 dbms_output.put_line(no);

18 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

19 dbms_output.put_line(t_s(3));

20 dbms_output.put_line(t_s(5));

21* end;

SQL> /

10

Axiao

7369

7788,SCOTT,ANALYST

10

20

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 type rec_s is record

9 (subject varchar2(10),

10 score integer);

11 r_s rec_s;

12 begin

13 a:=10;

14 b:='Axiao';

15 select empno into no from emp where empno=7369;

16 select * into e from emp where empno=7788;

17 t_s(3):=10;

18 t_s(5):=20;

19 r_s.subject='语文';

20 r_s.score=70;

21 dbms_output.put_line(a);

22 dbms_output.put_line(b);

23 dbms_output.put_line(no);

24 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

25 dbms_output.put_line(t_s(3));

26 dbms_output.put_line(t_s(5));

27 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

28* end;

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 type rec_s is record

9 (subject varchar2(10),

10 score integer);

11 r_s rec_s;

12 begin

13 a:=10;

14 b:='Axiao';

15 select empno into no from emp where empno=7369;

16 select * into e from emp where empno=7788;

17 t_s(3):=10;

18 t_s(5):=20;

19 r_s.subject:='语文';

20 r_s.score:=70;

21 dbms_output.put_line(a);

22 dbms_output.put_line(b);

23 dbms_output.put_line(no);

24 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

25 dbms_output.put_line(t_s(3));

26 dbms_output.put_line(t_s(5));

27 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

28* end;

SQL> /

10

Axiao

7369

7788,SCOTT,ANALYST

10

20

语文,70

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 type rec_s is record

9 (subject varchar2(10),

10 score integer);

11 r_s rec_s;

12 begin

13 a:=10;

14 b:='Axiao';

15 select empno into no from emp where empno=9999;

16 select * into e from emp where empno=7788;

17 t_s(3):=10;

18 t_s(5):=20;

19 r_s.subject:='语文';

20 r_s.score:=70;

21 dbms_output.put_line(a);

22 dbms_output.put_line(b);

23 dbms_output.put_line(no);

24 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

25 dbms_output.put_line(t_s(3));

26 dbms_output.put_line(t_s(5));

27 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

28 exception

29 when no_data_found then

30 dmbs_output.put_line('没有找到合适的记录');

31 when too_many_rows then

32 dmbs_output.put_line('找到太多的确记录');

33* end;

SQL> /

dmbs_output.put_line('没有找到合适的记录');

*

ERROR 位于第 30 行:

ORA-06550: 第 30 行, 第 6 列:

PLS-00201: 必须说明标识符 'DMBS_OUTPUT.PUT_LINE'

ORA-06550: 第 30 行, 第 6 列:

PL/SQL: Statement ignored

ORA-06550: 第 32 行, 第 6 列:

PLS-00201: 必须说明标识符 'DMBS_OUTPUT.PUT_LINE'

ORA-06550: 第 32 行, 第 6 列:

PL/SQL: Statement ignored

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 type rec_s is record

9 (subject varchar2(10),

10 score integer);

11 r_s rec_s;

12 begin

13 a:=10;

14 b:='Axiao';

15 select empno into no from emp where empno=9999;

16 select * into e from emp where empno=7788;

17 t_s(3):=10;

18 t_s(5):=20;

19 r_s.subject:='语文';

20 r_s.score:=70;

21 dbms_output.put_line(a);

22 dbms_output.put_line(b);

23 dbms_output.put_line(no);

24 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

25 dbms_output.put_line(t_s(3));

26 dbms_output.put_line(t_s(5));

27 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

28 exception

29 when no_data_found then

30 dbms_output.put_line('没有找到合适的记录');

31 when too_many_rows then

32 dbms_output.put_line('找到太多的确记录');

33* end;

SQL> /

没有找到合适的记录

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 no emp.empno%type;

5 e emp%rowtype;

6 type tab_s is table of integer index by binary_integer;

7 t_s tab_s;

8 type rec_s is record

9 (subject varchar2(10),

10 score integer);

11 r_s rec_s;

12 begin

13 a:=10;

14 b:='Axiao';

15 select empno into no from emp where job='CLERK';

16 select * into e from emp where empno=7788;

17 t_s(3):=10;

18 t_s(5):=20;

19 r_s.subject:='语文';

20 r_s.score:=70;

21 dbms_output.put_line(a);

22 dbms_output.put_line(b);

23 dbms_output.put_line(no);

24 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

25 dbms_output.put_line(t_s(3));

26 dbms_output.put_line(t_s(5));

27 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

28 exception

29 when no_data_found then

30 dbms_output.put_line('没有找到合适的记录');

31 when too_many_rows then

32 dbms_output.put_line('找到太多的确记录');

33* end;

SQL> /

找到太多的确记录

PL/SQL 过程已成功完成。

SQL> ED

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1427);

15 begin

16 a:=10;

17 b:='Axiao';

18 c:=a/0;

19 select empno into no from emp where job='CLERK';

20 select * into e from emp where empno=7788;

21 t_s(3):=10;

22 t_s(5):=20;

23 r_s.subject:='语文';

24 r_s.score:=70;

25 dbms_output.put_line(a);

26 dbms_output.put_line(b);

27 dbms_output.put_line(no);

28 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

29 dbms_output.put_line(t_s(3));

30 dbms_output.put_line(t_s(5));

31 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

32 exception

33 when no_data_found then

34 dbms_output.put_line('没有找到合适的记录');

35 when too_many_rows then

36 dbms_output.put_line('找到太多的确记录');

37 when ee then

38 dbms_output.put_line('除0了!');

39* end;

SQL> /

declare

*

ERROR 位于第 1 行:

ORA-01476: 除数为 0

ORA-06512: 在line 18

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1427);

15 begin

16 a:=10;

17 b:='Axiao';

18 c:=a/0;

19 select empno into no from emp where job='CLERK';

20 select * into e from emp where empno=7788;

21 t_s(3):=10;

22 t_s(5):=20;

23 r_s.subject:='语文';

24 r_s.score:=70;

25 dbms_output.put_line(a);

26 dbms_output.put_line(b);

27 dbms_output.put_line(no);

28 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

29 dbms_output.put_line(t_s(3));

30 dbms_output.put_line(t_s(5));

31 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

32 exception

33 when others then

34 dbms_output.put_line(sqlcode);

35* end;

SQL> /

-1476

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1476);

15 begin

16 a:=10;

17 b:='Axiao';

18 c:=a/0;

19 select empno into no from emp where job='CLERK';

20 select * into e from emp where empno=7788;

21 t_s(3):=10;

22 t_s(5):=20;

23 r_s.subject:='语文';

24 r_s.score:=70;

25 dbms_output.put_line(a);

26 dbms_output.put_line(b);

27 dbms_output.put_line(no);

28 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

29 dbms_output.put_line(t_s(3));

30 dbms_output.put_line(t_s(5));

31 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

32 exception

33 when ee then

34 dbms_output.put_line('除0了!');

35 when others then

36 dbms_output.put_line(sqlcode);

37* end;

SQL> /

除0了!

PL/SQL 过程已成功完成。

/**************************************流程控制******************************************/
/*注:
1条件:
IF 条件 THEN
语句
ELSIF 条件 THEN
语句
ELSE
语句
END IF;
2循环:
LOOP
语句
[EXIT WHEN 条件]
END LOOP
3While循环
While 条件 LOOP
END LOOP
/************例子*****************/
1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1476);

15 e1 exception;

16 begin

17 a:=0;

18 b:='Axiao';

19 if a=0 then

20 raise e1;

21 end if;

22 c:=a/0;

23 select empno into no from emp where job='CLERK';

24 select * into e from emp where empno=7788;

25 t_s(3):=10;

26 t_s(5):=20;

27 r_s.subject:='语文';

28 r_s.score:=70;

29 dbms_output.put_line(a);

30 dbms_output.put_line(b);

31 dbms_output.put_line(no);

32 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

33 dbms_output.put_line(t_s(3));

34 dbms_output.put_line(t_s(5));

35 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

36 exception

37 when ee then

38 dbms_output.put_line('除0了!');

39 when e1 then

40 dbms_output.put_line('a不可以为0了!');

41 when others then

42 dbms_output.put_line(sqlcode);

43* end;

SQL> /

a不可以为0了!

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1476);

15 e1 exception;

16 begin

17 a:=0;

18 b:='Axiao';

19 if a=0 then

20 raise e1;

21 end if;

22 c:=a/0;

23 select empno into no from emp where job='CLERK';

24 select * into e from emp where empno=7788;

25 t_s(3):=10;

26 t_s(5):=20;

27 r_s.subject:='语文';

28 r_s.score:=70;

29 dbms_output.put_line(a);

30 dbms_output.put_line(b);

31 dbms_output.put_line(no);

32 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

33 dbms_output.put_line(t_s(3));

34 dbms_output.put_line(t_s(5));

35 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

36 exception

37 when others then

38 dbms_output.put_line(to_char(sqlcode)||','||sqlerrm);

39* end;

SQL> /

1,User-Defined Exception

PL/SQL 过程已成功完成。

SQL> ed

已写入文件 afiedt.buf

1 declare

2 a integer;

3 b varchar2(10);

4 c integer;

5 no emp.empno%type;

6 e emp%rowtype;

7 type tab_s is table of integer index by binary_integer;

8 t_s tab_s;

9 type rec_s is record

10 (subject varchar2(10),

11 score integer);

12 r_s rec_s;

13 ee exception;

14 pragma exception_init(ee,-1476);

15 begin

16 a:=0;

17 b:='Axiao';

18 if a=0 then

19 raise_application_error(-20001,'A不可以为0!');

20 end if;

21 c:=a/0;

22 select empno into no from emp where job='CLERK';

23 select * into e from emp where empno=7788;

24 t_s(3):=10;

25 t_s(5):=20;

26 r_s.subject:='语文';

27 r_s.score:=70;

28 dbms_output.put_line(a);

29 dbms_output.put_line(b);

30 dbms_output.put_line(no);

31 dbms_output.put_line(to_char(e.empno)||','||e.ename||','||e.job);

32 dbms_output.put_line(t_s(3));

33 dbms_output.put_line(t_s(5));

34 dbms_output.put_line(r_s.subject||','||to_char(r_s.score));

35 exception

36 when others then

37 dbms_output.put_line(to_char(sqlcode)||','||sqlerrm);

38* end;

SQL> /

-20001,ORA-20001: A不可以为0!

PL/SQL 过程已成功完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: