我想进行批量绑定,如果游标所查询的表是一个已确定的表,则可以用下面的语句来使用bulk collect:--在fetch into中使用bulk collect
DECLARE
TYPE DeptRecTab IS TABLE OF dept%ROWTYPE;
dept_recs DeptRecTab;
CURSOR c1 IS
SELECT deptno, dname, loc FROM dept WHERE deptno > 10;
BEGIN
OPEN c1;
FETCH c1 BULK COLLECT INTO dept_recs;
END;
现在的问题是,如果这个dept表是一个动态变换的表时(如按日期变换,dept20081201,dept20081202,dept20081203 ....,即游标对应的表是个变量名时),该如何来使用bulk collect呢?

解决方案 »

  1.   

    用动态sql可以吗?
    就是形如:execute immediate 'SQL字符串';的那种
      

  2.   

    那你定义的时候 就能把 要into的 对象动态定义吗?
    如果可以,那么 全部都可以用动态sql来实现。
      

  3.   

    表的栏位和条件都改变了.
    现在的问题是,如果这个dept表是一个动态变换的表时(如按日期变换,dept20081201,dept20081202,dept20081203 ....,即游标对应的表是个变量名时),该如何来使用bulk collect呢?直接用execute immediate 'SQL字符串'是的,只能这样,但不能用'TYPE DeptRecTab IS TABLE OF dept%ROWTYPE; 
    '的类型来绑定.
    v_sql := 'SELECT deptno, dname, loc FROM '||v_dept||' WHERE deptno > 10';Execute immediate v_sql;
      

  4.   

    TYPE DeptRecTab IS TABLE OF dept%ROWTYPE中的dept不支持变量吧?