知识大全 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相关参考