Oracle之存储过程

–1
–创建存储过程,包括3部分,声明,执行,异常处理
创建存储过程不需要使用declare关键字,而是使用create
or replace关键字
in模式参数

		create or replace procedure pro_insertdept is
		begin
		insert into dept values(77,'市场拓展部','jilin');
		commit;
		dbms_output.put_line('插入成功!');
		end;
		/

–out:输出类型的参数

create or replace procedure select_dept(
num_deptno in number,
var_dname out dept.dname%type,
var_loc out dept.loc%type
)is
begin
select dname,loc into var_dname,var_loc
from dept
where deptno=num_deptno;
expection 
	when no_data_found then
	dbms_output.put_line('666');
end select_dept;
/

–【1】使用pl/sql块调用out模式的存储过程

set serverout on;
declare
var_dname dept.dname%type;
var_loc dept.loc%type;
begin
select_dept(99,var_dname,var_loc);
dbms_output.put_line(var_dname||var_loc);
end;
/

–【2】使用exec命令执行out模式的存储过程
–需要用variable关键字声明两个变量,用以存储out参数

variable var_dname varchar2(50);
variable var_loc varchar2(50);
exec select_dept(15,:var_dname,:var_loc);

–此时看不到值,可用print命令打印输出值

print var_dname var_loc;

–使用select语句输出

select :var_dname,:var_loc
from dual;

若声明了out模式的参数,则在执行存储过程时,
必须为out参数提供变量,以便接收out参数的返回值
否则,程序执行后将会出现错误。

–in out模式

create or replace procedure pro_square(
num in out number,
flag in boolean)is
i int:=2;
begin
	if flag then
	num:=power(num,i);
	else
	num:=sqrt(num);
	end if;
end;
/

–调用存储过程pro_square

set serverout on;
declare
var_number in number;
var_temp number;
boo_flag boolean;
begin
var_temp:=3;
var_number:=var_temp;
boo_flag:=false;
pro_square(var_number,boo_flag);
if boo_flag then
	dbms_output.put_line(var_temp||'的平方为:'||var_number);
else
	dbms_output.put_line(var_temp||'平方根为:'||var_number);
end if;
end;
/

in参数的默认值

create or replace procedure insert_dept(
num_deptno in number,
var_dname in varchar2 default '综合楼',
var_loc in varchar2 default '北京')is
begin
insert into dept values(num_deptno,var_dname,var_loc);
end;
/

–调用该存储过程

declare
row_dept dept%rowtype;
begin
insert_dept(57,var_loc=>'太远');
commit;
select * into row_dept from dept where deptno=57;
dbms_output.put_line('');
end;
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值