oracle RETURNING 子句使用方法
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;
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;
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 oracle RETURNING 子句使用方法
相关文章
- Oracle数据库:实现完美保护与覆盖(oracle数据库覆盖)
- Oracle 等待事件 ARCH Remote Write 官方解释,作用,如何使用及优化方法
- 换上Oracle,展开新的使用体验(oracle换用户)
- Oracle数据库慢响应:调整应对方法(oracle数据库响应慢)
- Oracle新增自增主键的使用方法(oracle新增主键)
- 使用Oracle的变量执行动态SQL(oracle执行变量)
- 掌握Oracle触发器类型的全部知识(oracle触发器类型)
- 深入理解Oracle触发器类型(oracle触发器类型)
- 深入理解Oracle数据库中的触发器类型(oracle触发器类型)
- 从Oracle OPC 到数据优化:实现最佳运行性能(oracleopc)
- Oracle数据库在成绩管理上的应用(oracle成绩管理系统)
- 串使用Oracle中SUBSTR函数截取字符串(oracle中截取字符)
- 免费使用Oracle许可证,让你体验无限惊喜(oracle免费许可证)
- 调用Dan连接Oracle数据库的方法(dan连接oracle)
- 备份离线备份CX Oracle数据库的安全之道(cx oracle 离线)
- 深入理解Oracle事务的用法(oracle事物用法)
- 化Oracle代码格式化让程序更易阅读(oracle代码的格式)
- Oracle中使用序列产生流水号(oracle中生成流水号)
- Oracle中自动生成序号的方法(oracle中生成序号)
- 使用Oracle中的SUM函数实现数据求和(oracle 中求和函数)
- Oracle中的标记点设置从入门到实践(oracle中标记点设置)
- Oracle进入图形界面的方式(oracle从哪进到界面)
- Oracle数据库中TOP语句的使用(oracle中top的用法)
- Oracle与汉得共创双赢新未来(oracle与汉得)
- Oracle拒绝使用引号(oracle不能用引号)
- Oracle Grid实现企业数据库和应用协同运行(oracle gird)
- Oracle数据库把数据管理变得更加简单(oracle 65279)