`

ORACLE RETURNING 语句的使用方法

阅读更多

1.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 t1;

DROP SEQUENCE t1_seq;

CREATE TABLE t1 (

ID NUMBER(10),

DESCRIPTION VARCHAR2(50),

CONSTRAINT t1_pk PRIMARY KEY (id));

CREATE SEQUENCE t1_seq;

INSERT INTO t1 VALUES (t1_seq.nextval, 'ONE');

INSERT INTO t1 VALUES (t1_seq.nextval, 'TWO');

INSERT INTO t1 VALUES (t1_seq.nextval, 'THREE');

COMMIT;
 

 

2.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

v_id t1.id%TYPE;

BEGIN

INSERT INTO t1

VALUES (t1_seq.nextval, 'FOUR')

RETURNING id INTO v_id;

COMMIT;

DBMS_OUTPUT.put_line('ID=' || v_id);

END;

/

 

ID = 4

 

3.The syntax is also available for update and delete statements.

 

SET SERVEROUTPUT ON

DECLARE

v_id t1.id%TYPE;

BEGIN

UPDATE t1

SET description = description

WHERE description = 'FOUR'

RETURNING id INTO v_id;

DBMS_OUTPUT.put_line('UPDATE ID=' || v_id);

DELETE FROM t1

WHERE description = 'FOUR'

RETURNING id INTO v_id;

DBMS_OUTPUT.put_line('DELETE ID=' || v_id);

COMMIT;

END;

/

 

UPDATE ID = 4

DELETE ID = 4

 

4.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 t1.id%TYPE;

v_tab t_tab;

BEGIN

UPDATE t1

SET description = description

RETURNING id BULK COLLECT INTO v_tab;

FOR i IN v_tab.first .. l_tab.last LOOP

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

END LOOP;

COMMIT;

END;

/

UPDATE ID = 1

UPDATE ID = 2

UPDATE ID = 3

 

5.We can also use the RETURNING INTO clause in combination with bulk binds.

SET SERVEROUTPUT ON

DECLARE

TYPE t_desc_tab IS TABLE OF t1.description%TYPE;

TYPE t_tab IS TABLE OF t1%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 t1

VALUES (t1_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;

COMMIT;

END;

 /

INSERT ID = 5 DESC =FIVE

INSERT ID = 6 DESC =SIX

INSERT ID = 7 DESC =SEVEN

 

6.This functionality is also available from dymanic SQL.

SET SERVEROUTPUT ON

DECLARE

TYPE t_tab IS TABLE OF t1.id%TYPE;

l_tab t_tab;

BEGIN

EXECUTE IMMEDIATE 'UPDATE t1

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;

COMMIT;

END;

/

UPDATE ID = 1

UPDATE ID = 2

UPDATE ID = 3

 

分享到:
评论

相关推荐

    oracle RETURNING 子句使用方法

    Oracle的RETURNING子句是数据库操作中的一个强大特性,它允许在执行INSERT、UPDATE或DELETE语句时直接获取处理的数据结果。这在处理事务时非常有用,尤其是当你需要基于新插入或更新的数据进行进一步操作时。 1. **...

    oracle PL/SQL语句

    Oracle PL/SQL语句 PL/SQL语句是Oracle数据库中的一种编程语言,用于创建存储过程、函数、触发器等数据库对象。PL/SQL语句可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。 知识点一:存储过程的创建和...

    Oracle中Using用法

    在 Oracle 中,使用 Using 语句可以实现动态 SQL 的绑定变量,提高 SQL 语句的灵活性和安全性。本文将对 Oracle 中 Using 用法进行详细的介绍,并提供实际开发的示例和技巧。 一、静态 SQL 和动态 SQL 在 Oracle ...

    Oracle动态SQL之本地动态SQL的使用.pdf

    本文将探讨Oracle本地动态SQL的使用方法和技巧。 动态SQL的使用场景广泛,它允许开发者在程序中动态地构建SQL语句,而不是在编译时静态定义。这种方法特别适用于那些在编译时无法确定要执行的SQL语句的情况,比如在...

    cx-oracle英文原版.pdf

    - 解释了连接字符串的使用方法和连接池的概念。 - 涉及了数据库驻留连接池(Database Resident Connection Pooling, DRCP)。 - 还有代理认证、外部认证和特权连接的建立方法。 ### 4. 连接池与安全连接...

    oracle存储过程使用详解

    ### Oracle存储过程使用详解 在Oracle数据库环境中,存储过程是一种重要的数据库对象,它允许...存储过程是提高数据库性能、简化复杂业务逻辑处理的关键工具,熟练掌握其使用方法对于Oracle数据库开发者来说至关重要。

    Oracle常见命令操作.zip

    7. **在函数或存储过程中执行一条插入语句并返回主键ID值**:Oracle提供了`RETURNING INTO`子句,能在插入数据后立即获取自增主键的值,常用于PL/SQL块。 8. **将一个查询结果值动态赋值给一个变量**:在PL/SQL中,...

    oracle使用存储过程插入文件至数据库操作方法

    ### Oracle 使用存储过程插入文件至数据库操作方法 在Oracle数据库管理中,经常需要处理大量数据与文件的操作。本文将详细介绍如何使用存储过程将文件插入到Oracle数据库中的具体步骤及注意事项。 #### 一、创建...

    ORACLE转DB2对照全解

    **注意:** Oracle使用`RETURNING`子句来获取更新后的值,而DB2则需要使用`FETCH`语句来实现。 #### 十五、查询DUAL **Oracle:** ```sql SELECT 1 FROM DUAL; ``` **DB2:** ```sql SELECT 1 FROM SYSIBM....

    《Pro Oracle SQL》CHAPTER 9 The Model Clause -- 9.4Returning Updated Rows

    在Oracle SQL中,Model子句是一种强大的功能,允许进行复杂的行处理和模拟迭代计算,通常用于解决无法通过标准SQL更新语句简单实现的问题。 9.4小节“Returning Updated Rows”讨论了在执行Model操作后如何获取更新...

    INFORMIX与ORACLE存储过程语言之间的异同分析.pdf

    ORACLE存储过程语言也使用LET语句赋值,例如: 变量 := 表达式; 变量 := 函数; SELECT 字段1[段2[...]] INTO 变量1[,变量2[...]] FROM 表 WHERE 条件; SELECT INTO 表记录变量 FROM 表 WHERE 条件; 四、存储...

    oracle批量处理(bulk collect)

    - **RETURNING INTO**:在`DELETE`或`UPDATE`语句后,使用`BULK COLLECT`来获取受影响行的信息。 #### 四、示例 ##### 1. 在SELECT INTO语句中使用BULK COLLECT ```plsql DECLARE TYPE sal_list IS TABLE OF emp...

    第十四课Oracle游标和异常处理.pptx

    如果DML语句包含returning子句,如更新或删除后需要获取返回的值,可以使用returning into子句。 游标在Oracle中扮演着重要的角色,尤其是在处理多行结果集时。游标分为显式游标和隐式游标。显式游标需要显式声明、...

    用PHP操纵Oracle的LOB类型的数据

    在Oracle数据库中,当需要存储超过VARCHAR2类型最大限制(4000个字符或2000个汉字)的数据时,可以使用LOB(Large Object)类型,包括BLOB(Binary Large OBject)、CLOB(Character Large OBject)以及BFILE。...

    Oracle照片的读取写入

    在PL/SQL中,可以使用`UTL_FILE`包读取文件,然后用`DBMS_LOB`包的`BULK COLLECT INTO`和`INSERT`语句将数据存入数据库。 ```plsql DECLARE file_handle UTL_FILE.FILE_TYPE; lob_loc BLOB; buffer RAW(32767)...

    Mysql迁移到Oracle就是这么简单

    例如,MySQL的`LAST_INSERT_ID()`在Oracle中可能需要使用`RETURNING INTO`语句。 5. **性能优化**:Oracle提供了许多高级特性,如分区、物化视图、索引等,用于提升性能。迁移后,根据业务需求对新数据库进行性能...

    oracle转DB2 对照

    - 注意点: Oracle使用 `EXECUTE IMMEDIATE` 执行动态SQL,而DB2则需要先使用 `PREPARE` 准备SQL,然后再执行。 #### 3. 游标转换 - **Oracle** 和 **DB2** 都支持游标,但语法有所不同。 - Oracle示例: ```sql ...

    Oracle中动态SQL详解

    4. **使用`FORALL`**:当需要批量更新或插入数据时,可以使用`FORALL`语句来提高效率,如下所示: ```sql DECLARE TYPE num_list IS VARRAY(20) OF NUMBER; v_id num_list := num_list(100, 101); BEGIN FOR...

    基于Oracle高性能动态SQL程序开发

    在Oracle的编程环境中,动态SQL作为一种灵活的解决方案,能够根据不同的业务需求动态构建SQL语句,从而提供更加个性化的数据操作能力。本文将深入探讨Oracle中动态SQL的基本概念、执行原理以及具体的开发实践,旨在...

Global site tag (gtag.js) - Google Analytics