Преобразование оператора FOR в FORALL в Oracle PL / SQL - PullRequest
0 голосов
/ 08 октября 2018

Возможно ли преобразовать это "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);

Но у меня не хватает SELECT KEYBOARD

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы можете использовать ненулевое предложение

   FORALL tempCounter  IN tempCollection.FIRST .. tempCollection.LAST
    INSERT INTO tbexectempactstock 
    SELECT
        *
    FROM TABLE(tempCollection(tempCounter))
    WHERE tempCollection(tempCounter).execactstockkey IS NOT NULL;
0 голосов
/ 08 октября 2018

Я сомневаюсь, что вы можете преобразовать это условное утверждение в FORALL INSERT.A FORALL MERGE может быть возможным, но, на мой взгляд, лучший способ сделать это за одну вставку:

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