使用的表:
规则引擎表:
POINT表
我正在尝试在RULE ENGINE表中执行规则,其中一些数据(d1.sm.n1,d2.sm.n2..etc)是从POINT表中引用的。
“ XSGSY”的值取决于“规则”列中的规则。
注意:这些规则遵循plsql语法。
我尝试提取数据值(d1.sm.n1)并添加到规则中:
EXECUTE IMMEDIATE 'BEGIN If ''Yes'' = ''Yes'' OR
''Yes'' = ''Yes'' then return ''Y''; else return ''N''; end if; END;'
然后使用EXECUTE IMMEDIATE
执行规则,但不起作用。
错误:在过程中,RETURN语句不能包含表达式
也尝试过使用函数并得到错误:
EXECUTE IMMEDIATE 'create or replace function express return
VARCHAR2(10)
BEGIN If ''Yes'' = ''Yes'' OR ''Yes'' = ''Yes''
then return ''Y''; else return ''N''; end if;
END express;' INTO l_output;
错误:ORA-06546:DDL语句在非法上下文中执行
答案 0 :(得分:3)
您的设计看起来有缺陷。我想您想将动态构造的PL / SQL块的结果提取到局部变量中。如果是这样,您可以使用USING OUT variable
选项。
SET SERVEROUTPUT ON
DECLARE
l_x VARCHAR2(10);
BEGIN
EXECUTE IMMEDIATE 'BEGIN If ''Yes'' = ''Yes'' OR
''Yes'' = ''Yes'' then :x := ''Y''; else :x := ''N''; end if; END;' USING OUT l_x;
dbms_output.put_line(l_x);
END;
/
Y
PL/SQL procedure successfully completed.