insert into/update/delete returning into语法

   insert into/update/delete   returning  into语法用于在plsql程序设计中插入一条记录后返回插入的信息
到设定的变量中:
   注意:rownum不能返回,rowid可以返回。
总结:
  1,返回的时候直接使用被插入表的字段名称例如:returning rowid,deptno || ',' ||  dname || ',' || loc这里的rowid,dename,loc都是被插入表中的字段。
  2,不能与DML语句和远程对象一起使用;
  3,不能检索LONG 类型信息(也就是rownum不能被返回,只能返回rowid)
  4,当通过视图向基表中插入数据时,只能与单基表视图一起使用。

  5,update返回的是更新以后的字段的数值。
实例:
   declare
      v_rownum number;
      v_rowid  rowid;
      v_info   varchar2(30);
   begin
      insert into dept values(8,'业务部','北京')
      returning rowid,deptno || ',' ||  dname || ',' || loc
      into v_rowid,v_info;

      dbms_output.put_line(v_rowid);
      dbms_output.put_line(v_info);
    end;
输出结果:
    SQL> declare
  2      v_rownum number;
  3      v_rowid  rowid;
  4      v_info   varchar2(30);
  5  begin
  6      insert into dept values(8,'业务部','北京')
  7      returning rowid,deptno || ',' ||  dname || ',' || loc
  8      into v_rowid,v_info;
  9      dbms_output.put_line(v_rowid);
 10      dbms_output.put_line(v_info);
 11  end;
 12  /
AAAMfNAAEAAAAAMAAD
8,业务部,北京


PL/SQL procedure successfully completed

2,//更新时返回实例
DECLARE
   Row_id ROWID;
   info VARCHAR2(40);
BEGIN
   UPDATE dept SET deptno=100 WHERE DNAME='财务室'
   RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
   INTO row_id, info;
   DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
   DBMS_OUTPUT.PUT_LINE(info);
END;
   RETURNING子句用于检索被修改行的信息。当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中; 当UPDATE语句修改多行数据时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。

3,删除时返回
DECLARE
   Row_id ROWID;
   info VARCHAR2(40);
BEGIN
   DELETE dept WHERE DNAME='办公室'
   RETURNING rowid, dname||':'||to_char(deptno)||':'||loc INTO row_id, info;
   DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
   DBMS_OUTPUT.PUT_LINE(info);
END;

   RETURNING子句用于检索被删除行的信息:当DELETE语句删除单行数据时,RETURNING 子句可以检索被删除行的ROWID和REF值,以及被删除列的列表达式,并可将他们存储到PL/SQL变量或复合变量中; 当DELETE语句删除多行数据时,RETURNING 子句可以将被删除行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在DELETE中使用RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。


  如果在teturning 后边添加 rownum会有错误提示:
         ORA-00976: 此处不允许为 LEVEL, PRIOR 或 ROWNUM


  

猜你喜欢

转载自supanccy2013.iteye.com/blog/1997105