Plsql 在oracle pl/sql中将字符串/变量组合作为逻辑表达式进行求值

Plsql 在oracle pl/sql中将字符串/变量组合作为逻辑表达式进行求值,plsql,oracle11g,Plsql,Oracle11g,在我的Pl/Sql代码中,我有三个变量v_var1、v_operand、v_var2,它们的值是基于一些逻辑填充的v_var1和v_var2可以是date、number和varchar。关联的操作数将仅符合数据类型。一个样本是 v_var1=10,v_操作数='=',v_var2=20。 基于这些值,我必须评估条件v_var1-v_操作数-v_var2是真还是假 例:-有了上述值,我必须评估10是否等于20 我怎样才能做到这一点?我是否可以将整个字符串作为“10=20”传递给某个函数,并将结果设

在我的Pl/Sql代码中,我有三个变量v_var1、v_operand、v_var2,它们的值是基于一些逻辑填充的v_var1和v_var2可以是date、number和varchar。关联的操作数将仅符合数据类型。一个样本是 v_var1=10,v_操作数='=',v_var2=20。 基于这些值,我必须评估条件v_var1-v_操作数-v_var2是真还是假

例:-有了上述值,我必须评估10是否等于20

我怎样才能做到这一点?我是否可以将整个字符串作为“10=20”传递给某个函数,并将结果设为false


我能想到的一种方法是编写CASE语句进行求值,但有没有更好的方法?

您可以使用动态SQL作为双表上的过滤器进行求值:

如果条件为true,则计数将为1,否则将为0,然后可以通过选择计数的局部变量来测试


将日期和数字作为字符串保存并不理想,即使是暂时的,但只要您一致地转换为真实数据类型或从真实数据类型转换为真实数据类型(例如,始终使用to_date和to_char显式转换日期并指定格式掩码),就可以了。

您可以使用动态SQL作为双表上的过滤器进行计算:

如果条件为true,则计数将为1,否则将为0,然后可以通过选择计数的局部变量来测试


将日期和数字作为字符串保存不是很理想,即使是暂时的,但只要您一致地转换为真实数据类型或从真实数据类型转换为真实数据类型,例如始终使用to_date和to_char显式转换日期并指定格式掩码,就可以了。

谢谢Alex!!这就是我需要的。谢谢亚历克斯!!这就是我需要的。
declare
  v_var1 varchar2(10) := '10';
  v_operand varchar2(10) := '=';
  v_var2 varchar2(10) := '20';

  l_result number;
begin
  execute immediate 'select count(*) from dual where :var1 ' || v_operand || ' :var2'
    into l_result using v_var1, v_var2;

  if l_result = 1 then
    dbms_output.put_line('True');
  else
    dbms_output.put_line('False');
  end if;
end;
/

PL/SQL procedure successfully completed.

False