您现在的位置是:网站首页> 编程资料编程资料
Oracle在DML语句中使用returing into子句_oracle_
2023-05-27
492人已围观
简介 Oracle在DML语句中使用returing into子句_oracle_
一、概述:
ORACLE的DML语句中可以指定RETURNING语句。使用起来也很简单,和SELECT INTO语句没有多大区别。RETURNING语句的使用在很多情况下可以简化PL/SQL编程。
- INSERT操作: 返回INSERT之后的结果;
- UPDATE操作: 返回UPDATE操作之后的结果。
- DELETE操作: 返回DELETE之前的结果;
INSERT INTO SELECT和MERGE语句不支持RETURNING语句。RETURNING和return通用。
二、当插入使用序列生成主键值的数据时,能返回此主键值。
DECLARE l_id t1.id%TYPE; BEGIN INSERT INTO t1 VALUES (t1_seq.nextval, 'FOUR') RETURNING id INTO l_id; COMMIT; DBMS_OUTPUT.put_line('ID=' || l_id); END;三、更新和删除语句。
DECLARE l_id t1.id%TYPE; BEGIN UPDATE t1 SET description = description WHERE description = 'FOUR' RETURNING id INTO l_id; DBMS_OUTPUT.put_line('UPDATE ID=' || l_id); DELETE FROM t1 WHERE description = 'FOUR' RETURNING id INTO l_id; DBMS_OUTPUT.put_line('DELETE ID=' || l_id); COMMIT;四、当DML影响多行时,使用returing into,借助bulk collection语句将值返回到一个集合中。
DECLARE TYPE t_tab IS TABLE OF t1.id%TYPE; l_tab t_tab; BEGIN UPDATE t1 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; COMMIT; END;五、在For All语句中使用returing into。
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;六、在动态sql中使用。
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' using 7369 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;注意:
returning into在动态sql内部和外面都要写,且外面的returning后面不加字段直接into。
using在returning前面
动态sql内部into后面变量名不固定,注意冒号(:),可以是命名规则下的任意字符。
returning bulk collect into要写在外面,且后面不能是record。
七、在C# 中使用returing into子句。
using (OracleCommand cmd = Globals.Db.Connection.CreateCommand()) { cmd.CommandText = "INSERT INTO table (Col1, Col2) VALUES (:ParamCol1, :ParamCol2) RETURNING ROWIDTOCHAR(ROWID) INTO :OutputROWID"; cmd.Parameters.Add(paramCol1, data["Col1"]); cmd.Parameters.Add(paramCol2, data["Col2"]); OracleParameter outputRowId = new OracleParameter(":OutputROWID", OracleDbType.Varchar2, 30) { Direction = ParameterDirection.ReturnValue };//一定要有Size参数。 cmd.Parameters.Add(outputRowId); cmd.BindByName = true; cmd.ExecuteNonQuery(); string rtnValue = outputRowId.Value.ToString(); }到此这篇关于Oracle在DML语句中使用returing into子句的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- Oracle故障处理Rman-06207&Rman-06214的方法_oracle_
- 检查Oracle数据库版本的7种方法汇总_oracle_
- Oracle ORA-00904:标识符无效解决方法(太坑了!!)_oracle_
- Oracle数据库的两种授权收费方式详解_oracle_
- Oracle 11g+windows 环境下Ecology7系统安装过程_oracle_
- Oracle 中检查临时表空间的方法_oracle_
- Oracle在表中有数据的情况下修改字段类型或长度的解决方法_oracle_
- 一文掌握Oracle中的Dual系统表_oracle_
- 项目适 Oracle改造及SSL安全性配置问题汇总详解_oracle_
- Oracle移动数据文件不停机和停机两种方式详解_oracle_
