知识大全 OracleDML子句RETURNINGINTO

Posted 文字

篇首语:读书志在圣贤,为官心存君国。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 OracleDML子句RETURNINGINTO相关的知识,希望对你有一定的参考价值。

OracleDML子句RETURNINGINTO  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  The RETURNING INTO clause allows us to return column values for rows affected by DML statements The following test table is used to demonstrate this clause

  DROP TABLE t ;

  DROP SEQUENCE t _seq;

  CREATE TABLE t (

  id NUMBER( )

  description VARCHAR ( )

  CONSTRAINT t _pk PRIMARY KEY (id)

  );

  CREATE SEQUENCE t _seq;

  INSERT INTO t VALUES (t _seq nextval ONE );

  INSERT INTO t VALUES (t _seq nextval O );

  INSERT INTO t VALUES (t _seq nextval THREE );

  MIT;When we insert data using a sequence to generate our primary key value we can return the primary key value as follows

  SET SERVEROUTPUT ON

  DECLARE

  l_id t id%TYPE;

  BEGIN

  INSERT INTO t VALUES (t _seq nextval FOUR )

  RETURNING id INTO l_id;

  MIT;

  DBMS_OUTPUT put_line( ID= || l_id);

  END;

  /

  ID=

  PL/SQL procedure successfully pleted

  SQL>The syntax is also available for update and delete statements

  SET SERVEROUTPUT ON

  DECLARE

  l_id t id%TYPE;

  BEGIN

  UPDATE t

  SET    description = description

  WHERE  description = FOUR

  RETURNING id INTO l_id;

  DBMS_OUTPUT put_line( UPDATE ID= || l_id);

  DELETE FROM t

  WHERE  description = FOUR

  RETURNING id INTO l_id;

  DBMS_OUTPUT put_line( DELETE ID= || l_id);

  MIT;

  END;

  /

  UPDATE ID=

  DELETE ID=

  PL/SQL procedure successfully pleted

  SQL>When DML affects multiple rows we can still use the RETURNING INTO but now we must return the values into a collection using the BULK COLLECT clause

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_tab IS TABLE OF t id%TYPE;

  l_tab t_tab;

  BEGIN

  UPDATE t

  SET    description = description

  RETURNING id BULK COLLECT INTO l_tab;

  FOR i IN l_tab first l_tab last LOOP

  DBMS_OUTPUT put_line( UPDATE ID= || l_tab(i));

  END LOOP;

  MIT;

  END;

  UPDATE ID=

  UPDATE ID=

  UPDATE ID=

  PL/SQL procedure successfully pleted

  SQL>We can also use the RETURNING INTO clause in bination with bulk binds

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_desc_tab IS TABLE OF t description%TYPE;

  TYPE t_tab IS TABLE OF t %ROWTYPE;

  l_desc_tab t_desc_tab := t_desc_tab( FIVE SIX SEVEN );

  l_tab   t_tab;

  BEGIN

  FORALL i IN l_desc_tab first l_desc_tab last

  INSERT INTO t VALUES (t _seq nextval l_desc_tab(i))

  RETURNING id description BULK COLLECT INTO l_tab;

  FOR i IN l_tab first l_tab last LOOP

  DBMS_OUTPUT put_line( INSERT ID= || l_tab(i) id ||

   DESC= || l_tab(i) description);

  END LOOP;

  MIT;

  END;

  /

  INSERT ID= DESC=FIVE

  INSERT ID= DESC=SIX

  INSERT ID= DESC=SEVEN

  PL/SQL procedure successfully pleted

  SQL>This functionality is also available from dymanic SQL

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_tab IS TABLE OF t id%TYPE;

  l_tab t_tab;

  BEGIN

  EXECUTE IMMEDIATE UPDATE t

  SET    description = description

  RETURNING id INTO :l_tab

  RETURNING BULK COLLECT INTO l_tab;

  FOR i IN l_tab first l_tab last LOOP

  DBMS_OUTPUT put_line( UPDATE ID= || l_tab(i));

  END LOOP;

  MIT;

  END;

  /

  UPDATE ID=

  UPDATE ID=

  UPDATE ID=

  PL/SQL procedure successfully pleted

cha138/Article/program/Oracle/201311/18329

相关参考