如何从具有 RETURNING 子句的动态 SQL 返回集合
Posted
技术标签:
【中文标题】如何从具有 RETURNING 子句的动态 SQL 返回集合【英文标题】:How to return a collection from dynamic SQL having RETURNING clause 【发布时间】:2015-09-09 07:21:46 【问题描述】:我有一个这样的 PL/SQL 块:
CREATE OR REPLACE TYPE NUMBER_TABLE_TYPE AS TABLE OF NUMBER;
DECLARE
updatedEmp NUMBER_TABLE_TYPE;
sqlstr VARCHAR2(1000);
tableName VARCHAR2(30) := 'EMPLOYEE';
deptId NUMBER := 12;
BEGIN
sqlstr := 'UPDATE '||tableName||' SET SALARY = SALARY * 2 WHERE DEPT_ID = :deptId '||
'RETURNING EMP_ID BULK COLLECT INTO :res';
EXECUTE IMMEDIATE sqlstr BULK COLLECT INTO updatedEmp USING deptId;
END;
RETURNING BULK COLLECT INTO
子句对于静态 DML 来说很简单,但在我的应用程序中它是一个动态的子句。我尝试了几种方法,但没有一个成功。知道如何实现这一目标吗?
【问题讨论】:
【参考方案1】:CREATE OR REPLACE TYPE NUMBER_TABLE_TYPE AS TABLE OF NUMBER;
DECLARE
updatedEmp NUMBER_TABLE_TYPE;
sqlstr VARCHAR2(1000);
tableName VARCHAR2(30) := 'EMPLOYEE';
deptId NUMBER := 12;
BEGIN
sqlstr := 'UPDATE '||tableName||' SET SALARY = SALARY * 2 WHERE DEPT_ID = :deptId '||
'RETURNING EMP_ID INTO :res';
EXECUTE IMMEDIATE sqlstr
USING deptId RETURNING BULK COLLECT INTO updatedEmp ;
END;
【讨论】:
以上是关于如何从具有 RETURNING 子句的动态 SQL 返回集合的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 是不是支持 SQL 语句中的 RETURNING?
防止 NHibernate 将 Returning 子句添加到生成的插入语句中