在列中执行Pl SQL条件并获取返回值

时间:2019-05-18 07:56:35

标签: oracle plsql

使用的表:

规则引擎表:

enter image description here

POINT表

enter image description here

我正在尝试在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语句在非法上下文中执行

1 个答案:

答案 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.