在Dynamic sql中使用序列

时间:2011-07-14 10:13:44

标签: plsql oracle11g

我有一个动态的sql:

forall k in 1..Job_ID.COUNT Save exceptions
EXECUTE IMMEDIATE 'insert into XYZ values(:1,:2,:3)' using sequence_one.NextVal,job_id(k),Name(k);
 ///Exception handling.

在运行上述查询时,只插入了一行。并抛出以下错误:

ORA-24381: error(s) in array DML.

知道为什么上面的事情正在发生?

1 个答案:

答案 0 :(得分:4)

您真的希望每个插入的行在第一列中具有相同的序列值吗?如果不是,你应该这样做:

forall k in 1..Job_ID.COUNT Save exceptions
  EXECUTE IMMEDIATE 'insert into XYZ values(sequence_one.NextVal,:2,:3)'
    using job_id(k),Name(k);

甚至更好(除非你有充分的理由使用动态SQL:

forall k in 1..Job_ID.COUNT Save exceptions
  insert into XYZ values(sequence_one.NextVal, job_id(k), Name(k));