例如:我需要使用以下代码计算员工评级:
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函数来进行计算并从查询中调用它。