oracle中PL/SQL学习笔记

存储过程中立即执行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;

猜你喜欢

转载自blog.csdn.net/huangbaokang/article/details/94625214
今日推荐