在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的一部分或作为绑定变量传入的所有内容都将超出范围。
但我不知道如何处理这个问题。
答案 0 :(得分:1)
必须从动态sql块访问记录,因此将其放在包头中。然后它全球可用......