日期:2014-05-16  浏览次数:20698 次

请教下BULK COLLECT 的问题
代码大概是这样
begin
...
V_SQL := 'SELECT ' || V_COLNAME || ' FROM ' || V_TBNAME ||
  ' WHERE ' || V_COLNAME || '=''' || IN_VAR || '''';
---这里是动态SQL
..

OPEN MY_CUR FOR V_SQL;
  FETCH MY_CUR BULK COLLECT
  INTO MY_VARRAY;

FOR I IN MY_VARRAY.FIRST .. MY_VARRAY.LAST LOOP
  INSERT INTO AAA_TEMP
  (TBNAME, COLNAME, INDEXDATA, OPDATE, DATAROWID, USERS)
  VALUES
  (V_TBNAME, V_COLNAME, MY_VARRAY(i), sysdate, null, V_USER);
  END LOOP;

end;

MY_VARRAY(i)只能取一列信息,如果我还想取ROWID,就不行了

理论想SQL这么写
V_SQL := 'SELECT ' || V_COLNAME || ',rowid FROM ' || V_TBNAME ||
  ' WHERE ' || V_COLNAME || '=''' || IN_VAR || '''';
。。
INSERT INTO AAA_TEMP
  (TBNAME, COLNAME, INDEXDATA, OPDATE, DATAROWID, USERS)
  VALUES
  (V_TBNAME, V_COLNAME, MY_VARRAY(i), sysdate, MY_VARRAY(i).rowid, V_USER);
但这样不行,有什么解决办法?

------解决方案--------------------
探讨
谢谢但是不行试过了