2016-11-15 103 views
1

您能與我們分享如何做IF ELSE內部FORALLIF ELSE FORALL內部條件

這是我的當前代碼工作正常。

FOR DECLARATION;

TYPE t_column1 IS TABLE OF USERS.column1%TYPE; 
TYPE t_column2 IS TABLE OF USERS.column1%TYPE; 

arr_column1  t_column1; 
arr_column2  t_column2; 

TYPE t_columnA IS TABLE OF ADDRESS.columnA%TYPE; 
TYPE t_columnB IS TABLE OF ADDRESS.columnA%TYPE; 

arr_columnA t_columnA := t_columnA(); 
arr_columnB t_columnB := t_columnB(); 

CURSOR cur IS 
    SELECT column1,column2 
    FROM USERS; 

i  INTEGER; 
l_done BOOLEAN; 
indx INTEGER; 

主要代碼:

OPEN cur; 
LOOP 
    FETCH cur BULK COLLECT INTO 
    arr_column1, arr_column2 
    LIMIT 10000; 

    l_done := curRESALEMASTER%NOTFOUND; 

    FOR indx IN 1 .. arr_column1.COUNT 
    LOOP 
     arr_columnA.extend; 
     arr_columnB.extend; 

     arr_columnA(indx) := arr_column1(indx); 
     arr_columnB(indx) := 'XYZ'; 

    END LOOP; 

    FORALL i IN 1 .. arr_column1.COUNT 
     INSERT INTO ADDRESS partition VALUES (
      arr_columnA(i), 
      arr_columnB(i), 
      arr_column2(i); 

    EXIT WHEN (l_done); 

END LOOP; 
COMMIT; 
CLOSE cur; 

所以我的問題是如何把條件FORALL

這將是這樣的:

FORALL i IN 1 .. arr_column1.COUNT 
    IF arr_columnA(indx) <> NULL THEN 
     INSERT INTO ADDRESS partition VALUES (
      arr_columnA(i), 
      arr_columnB(i), 
      arr_column2(i); 
    END IF; 

但我不能把條件內FORALL

+0

什麼編程語言,這是? –

+0

PL/SQL - ORACLE。抱歉忘了在標題中提及 – shukor

回答

1

首先,你不能用一個變量比較空。 你必須使用

IS [NOT] NULL 

要回答你的問題,我會嘗試這樣的:

FORALL i IN arr_column1.FIRST .. arr_column1.LAST 
     INSERT INTO ADDRESS partition 
     SELECT 
      arr_columnA(i), 
      arr_columnB(i), 
      arr_column2(i) 
     FROM DUAL 
     WHERE arr_columnA(indx) IS NOT NULL 
    ;