Oracle 在具有动态sql的plsql函数中处理空值

Oracle 在具有动态sql的plsql函数中处理空值,oracle,plsql,Oracle,Plsql,我使用的是一个函数,因为我使用的是动态sql。目前我处理的不是空值,但现在我还需要处理所有rec.FB_LVL的空值。 在下面的代码中,我需要使用“IF rec.FB_LVL*IS NULL THEN”。有人能告诉我如何在下面的函数中使用它吗 FUNCTION test_sample( p_num NUMBER, ) RETURN CLOB IS query_str CLOB; qry CLOB; BEGIN FOR rec IN (SELECT * FR

我使用的是一个函数,因为我使用的是动态sql。目前我处理的不是空值,但现在我还需要处理所有rec.FB_LVL的空值。 在下面的代码中,我需要使用“IF rec.FB_LVL*IS NULL THEN”。有人能告诉我如何在下面的函数中使用它吗

FUNCTION test_sample(
    p_num NUMBER,

  ) RETURN CLOB IS

  query_str CLOB;
  qry CLOB;

  BEGIN

    FOR rec IN (SELECT * FROM item_details WHERE data_source ='INERTNAL' AND is_active = 'Y'
                   )
                   )
    LOOP
        qry :='
              OR (1=1';

        IF rec.FB_LVL2 IS NOT NULL THEN
            IF rec.FB_LVL2_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL2 IN ('||rec.FB_LVL2||')';
            ELSE
            qry := qry||'
                  AND FB_LVL2 NOT IN ('||rec.FB_LVL2||')';
            END IF;
        END IF;

        IF rec.FB_LVL3 IS NOT NULL THEN
            IF rec.FB_LVL3_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL3 IN ('||rec.FB_LVL3||')';
            ELSE
            qry := qry||'
                  AND FB_LVL3 NOT IN ('||rec.FB_LVL3||')';
            END IF;
        END IF;

        IF rec.FB_LVL4 IS NOT NULL THEN
            IF rec.FB_LVL4_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL4 IN ('||rec.FB_LVL4||')';
            ELSE
            qry := qry||'
                  AND FB_LVL4 NOT IN ('||rec.FB_LVL4||')';
            END IF;
        END IF;

        IF rec.FB_LVL5 IS NOT NULL THEN
            IF rec.FB_LVL5_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL5 IN ('||rec.FB_LVL5||')';
            ELSE
            qry := qry||'
                  AND FB_LVL5 NOT IN ('||rec.FB_LVL5||')';
            END IF;
        END IF;

        IF rec.FB_LVL6 IS NOT NULL THEN
            IF rec.FB_LVL6_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL6 IN ('||rec.FB_LVL6||')';
            ELSE
            qry := qry||'
                  AND FB_LVL6 NOT IN ('||rec.FB_LVL6||')';
            END IF;
        END IF;

        IF rec.FB_LVL7 IS NOT NULL THEN
            IF rec.FB_LVL7_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL7 IN ('||rec.FB_LVL7||')';
            ELSE
            qry := qry||'
                  AND FB_LVL7 NOT IN ('||rec.FB_LVL7||')';
            END IF;
        END IF;

        IF rec.FB_LVL8 IS NOT NULL THEN
            IF rec.FB_LVL8_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL8 IN ('||rec.FB_LVL8||')';
            ELSE
            qry := qry||'
                  AND FB_LVL8 NOT IN ('||rec.FB_LVL8||')';
            END IF;
        END IF;

        IF rec.FB_LVL9 IS NOT NULL THEN
            IF rec.FB_LVL9_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL9 IN ('||rec.FB_LVL9||')';
            ELSE
            qry := qry||'
                  AND FB_LVL9 NOT IN ('||rec.FB_LVL9||')';
            END IF;
        END IF;

        IF rec.FB_LVL10 IS NOT NULL THEN
            IF rec.FB_LVL10_FLAG = 'I' THEN
            qry := qry||'
                  AND FB_LVL10 IN ('||rec.FB_LVL10||')';
            ELSE
            qry := qry||'
                  AND FB_LVL10 NOT IN ('||rec.FB_LVL10||')';
            END IF;
        END IF;

        IF rec.LV_PROD_TYPE_0_CODE IS NOT NULL THEN
            qry := qry||'
                  AND PROD_TYPE_0_CODE IN ('||rec.LV_PROD_TYPE_0_CODE||')';
        END IF;

        IF rec.LV_PROD_TYPE_2_CODE IS NOT NULL THEN
            qry := qry||'
                  AND PROD_TYPE_2_CODE IN ('||rec.LV_PROD_TYPE_2_CODE||')';
        END IF;

        qry:= qry||'
                 )';
        query_str := query_str||qry;

    END LOOP;

    RETURN query_str;

  END test_sample; 

非常感谢高级..

如果
rec.FB_LVL*
NULL
,您想要什么?类似于
如果rec.FB|LVL1为空,那么qry:=qry | |'和FB|u LVL1为空
您可能需要编辑此问题并更正参数声明-p|num后面的逗号将阻止其编译。祝你好运。