存储过程中立即执行SQL语句
execute immediate sql;
在sqlplus中执行存储过程
execute 存储过程名
oracle同义词创建,默认为私有同义词
create synonym ctb for item.chinastudentbook@dblink6;
公有同义词
create public synonym ctb for ....
同义词删除
drop synonym ctb;
drop public synonym pb_ctb;
定义常量,constant关键字
c_id constant number := 50;
绑定变量,使用:变量名的方式
SQL> begin
:bd:='hello you';
end;
SQL> print bd;
定义子类型
declare
subtype sub_num is number(5,1);
v2 sub_num;
begin
null;
end;
循环支持reverse反转
for counter in [reverse] 开始值..结束值 loop
end loop;
无条件退出
loop
exit
end loop;
有条件退出
loop
exit when y > 3;
end loop;
无条件继续
loop
continue;
end loop;
有条件继续
loop
continue when y>3;
end loop;
goto语句,需要定义标签,定义标签的语法<<标签名>>
declare
...
begin
<<hbk>>
...
if v1>20 then
goto hbk;
end if;
...
end;
当程序执行到goto语句时,不再执行goto之后的语句,而是跳转到标签hbk处,从hbk后的代码开始执行。
关于PL/SQL中的异常
declare
...
begin
...
exception
when 异常1 then
对异常1进行处理;
when 异常2 then
对异常2进行处理;
...
when others then
...
end;
捕捉异常
when others then
dbms_output.put_line('Error code:'||SQLCODE||' '||SQLERRM);
SQLCODE和SQLERRM都是Oracle预定义函数,前者返回错误代码,后者返回错误信息。
自定义异常,语法如下:
“异常的名字” exception
pragma exception_init(exception_name,-Oracle_error_number);
编号的范围-20000到-20999
触发方式,三种
1、由oracle自动触发异常
2、使用raise语句手工触发
3、调用存储过程raise_application_error手工触发
declare
myecp exception;
begin
raise myecp;
exception when myecp then
dbms_output.put_line('myecp error..');
end;
declare
myecp2 exception;
pragma exception_init(myecp2,-20009);
begin
raise_application_error(-20009,'data is out of list');
exception when myecp2 then
dbms_output.put_line('Error code:'||SQLCODE||' '||SQLERRM);
end;