2016-11-15 9 views
1

Можете ли вы, ребята, поделиться с как сделать ЕСЛИ ELSE Внутри a FORALL?IF ELSE Состояние внутри FORALL Oracle

Это мой текущий код, который отлично работает.

ДЛЯ ДЕКЛАРАЦИИ;

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

Прежде всего, вы не можете сравнить NULL с переменной. Вы должны использовать

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 
    ;