If statement 所有Oracle内部的IF-ELSE条件

If statement 所有Oracle内部的IF-ELSE条件,if-statement,plsql,bulkinsert,bulk-load,forall,If Statement,Plsql,Bulkinsert,Bulk Load,Forall,你们能在一个论坛中分享一下如何做 这是我目前的代码,运行良好 申报 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

你们能在一个论坛中分享一下如何做

这是我目前的代码,运行良好

申报

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 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;
对于1中的所有i。。arr_column1.COUNT
如果arr_columnA(indx)为空,则
插入到地址分区值中(
第(一)栏,
arr_columnB(i),
第2(i)栏;
如果结束;

但我不能将条件放在FORALL中首先,不能将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
  ;

或者,您可以尝试将IF语句放在外部,然后执行FORALL,如下所示:

IF arr_columnA(indx) IS NOT NULL THEN
  FORALL i IN arr_columnl.FIRST .. arr_column.LAST
     INSERT INTO ADDRESS partition
     SELECT
           arr_columnA(i),
           arr_columnB(i),
           arr_column2(i)
     FROM DUAL
END IF;

这是什么编程语言?PL/SQL-ORACLE。很抱歉,我忘了在标题中提到