RETURNING into用法

1、概述

returning...into...和insert/upadate/delete语句(也只能和他们一起使用,否则会报错:ORA-06547:RETURING clause must be used with INSERT, UPDATE, or DELETE statement)一起使用,用于赋予指定列的值给相应变量,类似于select...into...语句。returning...into...在insert、update和delete语句中返回的结果是有区别,其中:
  1) delete语句:returning...into...返回的是delete之前的结果; 
  2) insert语句returning...into...返回的是insert之后的结果; 
  3) update语句returning...into...返回的是update之后的结果。  

2、语法

   1) delete语句中使用
delete from table_name [where exp]
  returning column1, column2... into var1, var2...
   2) update语句中使用
insert into table_name values(...)
    returning column1, column2... into var1, var2...
   3) insert语句中使用
update table_name set exp1 [where exp2]
  returning column1, column2... into var1, var2...

注意:returning into不能使用INSERT INTO... SELECT语句和MERGE语句。

3、举例使用

   1)插入数据
declare
  v_gid t_student.gid%type;
begin
   insert into t_student(gid, name, age, sex) values(seq_admin.nextval, 'ZHANSAN', 28, '1')
        returning gid into v_gid;
   commit;
   dbms_output.put_line(v_gid);
end;
     打印结果:
100001
   2)修改数据
declare
  v_name t_student.name%type;
  v_age t_student.age%type;
begin
   update t_student set name = 'CHENZHEN' where gid = 1
        returning age, name into v_age, v_name;
   commit;
   dbms_output.put_line('name:'||v_name||', age:'||v_age);
end;
      打印结果:
name:CHENZHEN, age:45
    3)删除数据
declare
  v_name t_student.name%type;
  v_age t_student.age%type;
begin
   delete from t_student where gid = 1
        returning age, name into v_age, v_name;
   commit;
   dbms_output.put_line('name:'||v_name||', age:'||v_age);
end;
       打印结果:
name:CHENZHEN, age:45
     4)DML影响多个数据行,使用BULK COLLECT返回给数组
declare
  TYPE gid_tbl_type IS TABLE OF t_student.gid%type;
  v_gid_tbl gid_tbl_type;
begin
   update t_student set name = 'CHENZHEN'
        returning gid BULK COLLECT into v_gid_tbl;--使用BULK COLLECT将列的值返回给数组
   commit;
   for i in 1..v_gid_tbl.count loop
     dbms_output.put_line('updated gid: '||v_gid_tbl(i));
   end loop;
end;
        打印结果:
updated gid: 100001
updated gid: 100002
      5)批绑定中使用returning into
declare
  TYPE name_tbl_type IS TABLE OF t_student.name%type;
  TYPE gid_tbl_type IS TABLE OF t_student.gid%type;  
  v_name_tbl name_tbl_type := name_tbl_type('TONGZI', 'WENLI', 'DAZHUANG', 'ZHUANGSHAO');
  v_gid_tbl gid_tbl_type;
begin
  forall i in v_name_tbl.first..v_name_tbl.last
    insert into t_student(gid, name) values(seq_admin.nextval, v_name_tbl(i))
        returning gid BULK COLLECT into v_gid_tbl;--使用BULK COLLECT将列的值返回给数组
   commit;
   for i in 1..v_gid_tbl.count loop
     dbms_output.put_line('gid: '||v_gid_tbl(i)||', name:'||v_name_tbl(i)||' inserted');
   end loop;
end;
        打印结果:
gid: 100003, name:TONGZI inserted
gid: 100004, name:WENLI inserted
gid: 100005, name:DAZHUANG inserted
gid: 100006, name:ZHUANGSHAO inserted
     6)动态语句中使用returning into
declare
  TYPE gid_tbl_type IS TABLE OF t_student.gid%type;
  v_gid_tbl gid_tbl_type;
  v_name t_student.name%type;
begin
  v_name := 'CHENZHEN';
   execute immediate ' update t_student set name = :1 returning gid into :2' using v_name 
         returning bulk collect into v_gid_tbl;
   commit;
   
   for i in 1..v_gid_tbl.count loop
     dbms_output.put_line('updated gid: '||v_gid_tbl(i));
   end loop;
end;

                打印结果:

updated gid: 100003
updated gid: 100004
updated gid: 100005
updated gid: 100006


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值