在PL / SQL Oracle中将FOR语句转换为FORALL

时间:2018-10-08 07:17:44

标签: oracle for-loop plsql null forall

是否可以将“ for”转换为“ forall”?

FOR  tempCounter in tempCollection.FIRST .. tempCollection.LAST LOOP
  IF tempCollection(tempCounter).execactstockkey IS NULL THEN
    RETURN;
  END IF;
  INSERT INTO  tbexectempactstock VALUES  tempCollection(tempCounter);
END LOOP; 

我也尝试过

FORALL tempCounter in tempCollection.FIRST .. tempCollection.LAST
  INSERT WHEN tempCollection(i).execactstockkey IS NOT NULL
    THEN INTO tbexectempactstock VALUES tempCollection(tempCounter);

但是它弹出我缺少选择键盘

2 个答案:

答案 0 :(得分:2)

我怀疑您可以将此条件语句转换为FORALL INSERTFORALL MERGE可能是可行的,但我认为最好的方法是一次插入:

INSERT INTO tbexectempactstock
SELECT * FROM TABLE(tempCollection)
 WHERE execactstockkey IS NOT NULL

答案 1 :(得分:0)

您可以使用not null子句

   FORALL tempCounter  IN tempCollection.FIRST .. tempCollection.LAST
    INSERT INTO tbexectempactstock 
    SELECT
        *
    FROM TABLE(tempCollection(tempCounter))
    WHERE tempCollection(tempCounter).execactstockkey IS NOT NULL;