oracle存储过程IN,OUT,IN OUT参数

--存储过程输入输出参数
--1.【IN参数】
--创建存储过程:更新students表的学生年龄
create or replace procedure update_age(in_age in number)
as
begin
  update students set student_age=in_age;
  commit;
end;
--调用存储过程
begin
  update_age(18);
  commit;
end;
--查看调用存储过程后的结果
select * from students;
--结果
STUDENT_ID STUDENT_NAME STUDENT_AGE
---------- ------------ -----------
         1 金瑞                  18
         2 钟君                  18
         3 王山                  18
         4 刘迪                  18
         5 钟会                  18
         6 张玉                  18
         7 柳青                  18
         8 胡东                  18
         9 商乾                  18
        10 周明                  18
10 rows selected
--注意:如果在存储过程中尝试修改入参的值,会报错
create or replace procedure update_age(in_age in number)
as
begin
  update students set student_age=in_age;
  in_age:=in_age+2; --error
  commit;
end;
--2.【OUT参数】
--创建存储过程:修改学生的年龄,传入参数并输出参数
create or replace procedure update_age(in_age in number,out_age out number)
as 
begin
  update students set student_age=in_age;
  select student_age into out_age from students where student_id=1;--此处只能返回一行记录
  commit;
end;
--打开服务显示
set serverout on;
--调用存储过程
declare
  out_age number;
begin
  update_age(25,out_age);
  dbms_output.put_line(out_age);
end;
--结果
25
PL/SQL procedure successfully completed
--3.【输入输出参数IN OUT】
--交换两个数的值
create or replace procedure swap_value(param1 in out number,param2 in out number)
as
begin
  declare temp number;
  begin
    temp:=param1;
    param1:=param2;
    param2:=temp;
  end;
end;
/
--调用存储过程
declare
  param1 number:=3; 
  param2 number:=4;
begin
  swap_value(param1,param2);
  dbms_output.put_line('param1='||param1);
  dbms_output.put_line('param2='||param2);
end;
/
--结果
param1=4
param2=3
PL/SQL procedure successfully completed
--注意:1.存储过程的参数顺序不能乱;2.在创建存储过程的时候可以为参数设置默认值[value in number default 25]要放在参数末尾

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值