6.4. PL/SQL语法

PL/SQL语法是Oracle对标准SQL语言功能的扩展,其为Oracle数据库特有的编程语言。通过增加PL/SQL语法,使得Oracle数据库对后台编程功能的支持大大增强,从而可以更好的发挥Oracle数据库的优势。这里,我们仅就Oracle中最基本PL/SQL语法做简要介绍,具体相关详细信息,请参考官方或其他相关资料。

6.4.1. 语句块

语句块是独立的PL/SQL运行单位,这句话,在今后的实践中会逐渐被大家理解,这里不做过多解释,因为没有实践,过多的解释也是徒劳。

1)语法

declare

begin

exception

end;

2)例子

SQL> declare

begin

insert into t_teach(teach_no,name,age,grade)

values('00009','赵六',22,'助教');

commit;

end;

/

6.4.2. 变量

PL/SQL中的变量,和其他编程语言里的变量类似,只是语法不同而已。

1)语法

变量名 变量类型;

变量名 变量类型 default 默认值;

变量名 变量类型 :=默认值;

2)例子

SQL> set serveroutput on

SQL> declare

v_msg varchar2(100) :='默认值';

begin

DBMS_OUTPUT.PUT_LINE(v_msg);

end;

/

6.4.3. 赋值

1)语法

变量名:=数值;

2)例子

SQL> set serveroutput on

SQL> declare

v_msg varchar2(100) ;

begin

v_msg:='赋值';

DBMS_OUTPUT.PUT_LINE(v_msg);

end;

/

6.4.4. 条件语句(分支语句)

1)语法

If 条件 then

语句;

elsif 条件 then

语句;

else

语句;

end if;

2)例子

SQL> set serveroutput on

SQL> declare

v_score number :=0;

begin

select score into v_score from t_score where rownum<2;

if v_score<60 then

DBMS_OUTPUT.PUT_LINE('不及格');

elsif v_score>=60 and v_score<70 then

DBMS_OUTPUT.PUT_LINE('及格');

elsif v_score>=70 and v_score<80 then

DBMS_OUTPUT.PUT_LINE('中');

elsif v_score>=80 and v_score<90 then

DBMS_OUTPUT.PUT_LINE('良');

else

DBMS_OUTPUT.PUT_LINE('优');

end if;

end;

/

6.4.5. 循环语句

1)语法1

  • 语法

while 条件 loop

语句;

end loop;

  • 例子

SQL> set serveroutput on

SQL> declare

v_cnt number :=0;

begin

while v_cnt<5 loop

DBMS_OUTPUT.PUT_LINE(rpad('*',v_cnt,'*'));

v_cnt:=v_cnt+1;

end loop;

end;

/

2)语法2

  • 语法

loop

fetch 游标名 into 变量名;

exit when 游标名%notfound;

语句;

end loop;

  • 例子

SQL> set serveroutput on

SQL> declare  

cursor c1 is

select * from t_teach;

v_teach t_teach%rowtype;

begin

open c1;

loop

fetch c1 into v_teach;

exit when c1%notfound;

DBMS_OUTPUT.PUT_LINE(v_teach.name);

end loop;

close c1;

end;

/

3)语法3

  • 语法

for item in (select语句) loop

语句;    

end loop;

  • 例子

SQL> set serveroutput on

SQL> declare

begin

for item in (select * from t_teach) loop

DBMS_OUTPUT.PUT_LINE(item.name);    

end loop;

end;

/