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

时间:2018-07-10 18:28:00

标签: oracle plsql oracle11g

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

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

1 个答案:

答案 0 :(得分:0)

Oracle在SQL中没有IF语句,但是您可以使用CASE做同样的事情。

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

您可以为每个条件添加一列,例如

rating    points   emp_experience
5         150      3

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

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函数来进行计算并从查询中调用它。