oracle RETURNING 子句使用方法

 更新时间:2016年02月14日 12:02:39   投稿:mdxy-dxy  
这篇文章主要介绍了oracle RETURNING 子句使用方法,需要的朋友可以参考下

RETURNING 自己通常结合DML 语句使用。(INSERT UPDATE DELETE)

使用方法:

UPDATE table_name SET expr1
RETURNING column_name
INTO xxx

INSERT: 返回的是添加后的值
UPDATE:返回时更新后的值

DELETE:返回删除前的值

RETURNING 可以再sqlplus 和plsql中使用

如果是plsql就如上面的代码,xxx为声明的变量名

如果是sqlplus,xxx 可以为变量,即

VARIABLE var_name varchar2(10)
UPDATE table_name SET expr1
RETURNING column_name INTO :var_name;

这里的 :var_name 使用的是绑定变量


另外,RETURNING 貌似可以与 RETURN通用

INSERT INTO VALUES 支持 RETURNING

INSERT INTO SELECT、 和MERGE 语句 不支持 RETURNING

例子1:

建表语句:

CREATE TABLE TEST111(
    A1 VARCHAR(10),
    A2 VARCHAR(20)
);

CREATE SEQUENCE TEST111_S1
START WITH 1
INCREMENT BY 1
CACHE 20
MAXVALUE 999999999999999999999999999
CYCLE;
DECLARE 
 SEQ NUMBER;
BEGIN
 INSERT INTO TEST111 VALUES(TEST111_S1.NEXTVAL,'AAA2')
 RETURNING A1 INTO SEQ;
 DBMS_OUTPUT.PUT_LINE(SEQ);
END; 

DECLARE 
 SEQ NUMBER;
BEGIN
 INSERT INTO TEST111 VALUES(TEST111_S1.NEXTVAL,'AAA3');
 SELECT TEST111_S1.CURRVAL INTO SEQ FROM DUAL;
 COMMIT;
 DBMS_OUTPUT.PUT_LINE(SEQ);
END; 

例子2:
再另外,RETURNING 可以与BULK COLLECT 结合(批量绑定, 另外一个是 FORALL)

DECLARE
TYPE table_type IS TABLE OF column_name%TYPE;
v_tab table_type;
BEGIN
 UPDATE table_name
 SET expr1
 RETURNING column_name BULK COLLECT INTO v_tab;

 FOR i IN v_tab.first .. v_tab.last LOOP
 DBMS_OUTPUT.put_line( l_tab(i));
END LOOP;

COMMIT;
END;

ORA-06547:INSERT,UPDATE或DELETE语句必须使用RETURNING子句

产生这个错误的原因:

returning into子句作用于insert,update,delete,上而select则不行,应该用into。

报错的存储如下:

create or replace procedure p_stu_info(s_id number, s_name varchar2) is
 v_name  varchar2(10);
 v_age  number;
 v_ErrMsg varchar2(200);
begin
 execute immediate 'select name,age from student_test where id=:1 and name=:2'
  using s_id, s_name
  returning into v_name, v_age;
 dbms_output.put_line(v_name || '的年龄为:' || to_char(v_age));
exception
 when others then
  v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);
  dbms_output.put_line('找不到相应学生');
end p_stu_info;

改成下面这样就ok了:

create or replace procedure p_stu_info(s_id number, s_name varchar2) is
 v_name  varchar2(10);
 v_age  number;
 v_ErrMsg varchar2(200);
begin
 execute immediate 'select name,age from student_test where id=:1 and name=:2'
  into v_name, v_age
  using s_id, s_name;
 dbms_output.put_line(v_name || '的年龄为:' || to_char(v_age));
exception
 when others then
  v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);
  dbms_output.put_line('找不到相应学生,错误原因:'||v_ErrMsg);
end p_stu_info;

您可能感兴趣的文章:

相关文章

  • Oracle 忘记密码的找回方法

    Oracle 忘记密码的找回方法

    安装oracle 11g时,居然把刚刚更改的数据库管理员密码给忘了,google查询,终于找到修改方法。
    2009-02-02
  • Oracle 区块链表创建过程详解

    Oracle 区块链表创建过程详解

    Oracle 区块链表是一个具有防篡改功能的表,只能插入数据,同时提供了表级和行级的保留期限,接下来通过本文给大家分享Oracle区块链平台的创建过程,感兴趣的朋友一起看看吧
    2021-05-05
  • oracle中文乱码解决的办法

    oracle中文乱码解决的办法

    oracle中文乱码解决的办法,需要的朋友可以参考一下
    2013-02-02
  • oracle iSQL*PLUS配置设置图文说明

    oracle iSQL*PLUS配置设置图文说明

    iSQL*PLUS是从ORACLE 9i开始提供的新功能,是SQL*PLUS的Web形式(ORACLE 11g已经不支持)是基于三层结构设计的,需要的朋友可以了解下
    2012-12-12
  • PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法

    PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法

    这篇文章主要介绍了PLSQL无法连接64位Oracle数据库/Database下拉框为空的完美解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Oracle参数设置教程之set和reset的实用案例

    Oracle参数设置教程之set和reset的实用案例

    最近在学习oracle,学习中遇到了一些觉着有必要记录下的内容,所以下面这篇文章主要给大家介绍了关于Oracle参数设置教程之set和reset实用案例的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-10-10
  • Oracle数据迁移MySQL的三种简单方法

    Oracle数据迁移MySQL的三种简单方法

    对于许多企业而言,迁移数据库时最大的挑战之一是如何从一个数据库平台顺利迁移到另一个平台,下面这篇文章主要给大家介绍了关于Oracle数据迁移MySQL的三种简单方法,需要的朋友可以参考下
    2023-06-06
  • 在Oracle数据库表中加载多个数据文件的方法详解

    在Oracle数据库表中加载多个数据文件的方法详解

    这篇文章主要给大家介绍了在Oracle数据库表中加载多个数据文件的方法,本文中,我将展示 SQL 加载器 + Unix 脚本实用程序的强大功能,其中 SQL 加载器可以使用自动 shell 脚本加载多个数据文件,需要的朋友可以参考下
    2024-01-01
  • oracle临时表空间无法释放的解决办法

    oracle临时表空间无法释放的解决办法

    Oracle临时表空间主要是用于数据库较大的临时排序用,在PGA分配的工作区空间不足以容纳排序数据时使用临时表空间,但是容易遇到oracle临时表空间无法释放的问题,所以本文给大家介绍了oracle临时表空间无法释放的解决办法,需要的朋友可以参考下
    2024-03-03
  • Oracle中PL/SQL复合数据类型

    Oracle中PL/SQL复合数据类型

    这篇文章介绍了Oracle中PL/SQL的复合数据类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论