标识符必须在EXECUTE IMMEDIATE后声明

时间:2011-10-26 12:33:26

标签: sql database plsql

在StackOverflow之一的帮助下,我击败了一个问题,但现在又有了另一个问题。在我的程序中,我有这个代码:

 BEGIN 
FOR nr IN 1..102 
LOOP
    DBMS_OUTPUT.PUT_LINE(nr);
    EXECUTE IMMEDIATE 
        'BEGIN ' || 
            'IF rec.column_' || nr ||' IS NULL THEN ' || 
                ':x:=1; ' || 
            'ELSE ' ||
                ':x:=0; ' ||
            'END IF; ' ||
        'END; ' 
        USING OUT isnull;
    IF isnull = 1 THEN 
        DBMS_OUTPUT.PUT_LINE('test');
    END IF;
END LOOP;

END;

不幸的是,当我尝试运行此过程时,我收到错误:必须声明PLS-00201标识符'rec.column_1'。我发现了:

  

在您正在执行的动态SQL中,您引用OrderStoreData,但在动态SQL中未定义该名称的变量。   Execute Immediate执行的代码在其自己的范围内执行,未明确定义为NDS的一部分或作为绑定变量传入的所有内容都将超出范围。

但我不知道如何处理这个问题。

1 个答案:

答案 0 :(得分:1)

必须从动态sql块访问记录,因此将其放在包头中。然后它全球可用......