oracle RETURNING 子句使用方法_oracle

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
RETURNING
oracle returning、oracle model子句、oracle storage子句、oracle with子句、oracle using子句,以便于您获取更多的相关知识。

时间: 2024-11-09 02:01:19

oracle RETURNING 子句使用方法_oracle的相关文章

Oracle数据库系统紧急故障处理方法_oracle

正在看的ORACLE教程是:Oracle数据库系统紧急故障处理方法.Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障.这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起.所以我们首先要判断问题的起因,如果是硬件故障则首先要解决硬件问题.在无硬件问题的前提下我们才能按照下面的处理方发来进一步处理.  控制文件损坏:  控制文件记录了关于oracle的重要配置信息,如数据库名.字符集名字.各个数据文件.日志文件的位置等等信息.控制文件的损坏,会导致数据库异常关闭

oracle 存储过程加密的方法_oracle

配置环境: 1.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 2.安装路径:C:ORACLE 实现方法: 1.D:>set NLS_LANG=AMERICAN_AMERICA.USACII7 或 D:>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 D:>set 直接打set命令可以查看环境变量 2.在D:下创建a.sql文件,内容如下: Java代码 create or replace procedure test1(

Oracle最大日期获取方法_oracle

在开发应用中如何获取oracle的最大日期呢?本文将提供这样一个获取方法,需要的朋友可以参考下Sql代码 复制代码 代码如下: -- Created on 2010/06/08 by NAN declare -- Local variables here TYPE t_test IS TABLE OF DATE INDEX BY BINARY_INTEGER; v_test t_test; v_date DATE; BEGIN -- Test statements here v_test(1)

Excel导入oracle的几种方法_oracle

方法一.使用SQL*Loader这个是用的较多的方法,前提必须oracle数据中目的表已经存在.大体步骤如下:1.将excel文件另存为一个新文件比如文件名为text.txt,文件类型选文本文件(制表符分隔),这里选择类型为csv(逗号分隔)也行,但是在写后面的control.ctl时要将字段终止符改为','(fields terminated by ','),假设保存到c盘根目录. 2 .如果没有存在的表结构,则创建,假设表为test,有两列为dm,ms. 3.用记事本创建SQL*Loader

oracle数据库冷备份的方法_oracle

冷备份是数据库文件的物理备份,通常在数据库通过一个shutdown normal或shutdown immediate 命令正常关闭后进行.当数据库关闭时,其使用的各个文件都可以进行备份.这些文件构成一个数据库关闭时的一个完整映像.冷备份通常要备份以下文件:所有数据文件所有控制文件所有联机重做日志初始化参数文件initsid.ora(可选)先执行以下SQL语句查看所有需要备份的文件: 复制代码 代码如下: SVRMGR> select * from v$datafile;SVRMGR> sel

在Mac OS上安装Oracle数据库的基本方法_oracle

基本环境:Snow Leopard10.6.2,Oracle10.2.0.4 打开Mac的终端,执行: sudo -i 创建oinstall组和oracle用户,注意需要保证组合用户的ID与现有系统信息不冲突,这里采用700 创建组: dscl . -create /groups/oinstall dscl . -append /groups/oinstall gid 700 dscl . -append /groups/oinstall passwd "*" 创建用户: dscl .

Oracle 用户权限管理方法_oracle

sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 二.登陆 sqlplus / as sysdba;//登陆sys帐户 sqlplus sys as sysdba;//同上 sqlplus scott/tiger;//登陆普通用户scott sqlplus / as sys

Oracle字符集修改查看方法_oracle

1.怎么样查看数据库字符集 [A]数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter, 表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表 会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示

Oracle提高SQL执行效率的3种方法_oracle

Oracle提供了多种方法用于减少花在剖析Oracle SQL表达式上的时间,在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能.现在我们来简要地看看这些方法中的几种. 1.使用ordered提示 Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序.如果SQL表达式涉及七个乃至更多的表格合并,那么有时就会需要超过30分钟的时间来剖析,因为Oracle必须评估表格合并所有可能的顺序.八个表格就会有40,000多种顺序.Ordered这个提示(hint)和其他的提示