如何从数据库表 (ORACLE) 中获取"IF STATEMENT"条件?



例如:我需要使用以下代码计算员工评级:

IF POINTS > 150 AND EMP_Experience > 3 THEN 5;

我希望If条件将来可以配置,因此希望将其存储在数据库中。

TABLE EMP_CALC_MASTER
ID   |    Rating     |   Condition                                           
1    |     5         |   %POINTS% > 150 AND %EMP_Experience% > 3       

在我的存储过程中,我想获取上述条件,并用数据替换%Points%和%Emp_Experience%,然后分配评级,该评级也存储在表中。

v_condition = condition.replace(CALC_MASTER.Condition, %POINTS%, <points of the employee>)
IF v_condition THEN    -- This statement is not understood by Oracle as a valid condition
...
END IF

Oracle在SQL中没有IF语句,但您可以对CASE执行同样的操作。

你还没有说你希望它在多大程度上是可配置的,或者你的实际表是什么样子的,所以在这里很难明确。Oracle不能有动态表或列。

你可以为每个条件添加一列,比如

rating    points   emp_experience
5         150      3

然后,内部将其连接到您的基表,并在select中有一个类似的子句

CASE WHEN emp.points > emp_calc_master.points AND 
emp.emp_experience > emp_calc_master.emp_experience 
THEN emp_calc_master.rating ELSE NULL END

但我猜您希望emp_calc_master中有多个可能的行。

老实说,这已经变得足够复杂了,我可能会创建一个PL/SQL函数来进行计算,并从查询中调用它。