2015-09-09 41 views
1

返回集合我有这样一个PL/SQL块:如何从动态SQL有RETURNING子句

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,但是在我的应用程序是一个动态的。我尝试了几种方法,但没有解决。任何想法如何实现这一目标?

回答

3
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;