-1

我正在尝试学习 PL/SQL,但我在创建过程时遇到了问题。

我想创建一个程序,在试用期结束后自动增加 10% 的佣金 - 3 个月。我需要创建一个调度器,它会每天激活程序并检查条件是否满足。

我的代码:

create or replace procedure upd_sal(v_emp_id in employees.employee_id%type,
                                    v_h_date in employees.hire_date%type) is
  cursor c_emp_sal_update(cv_emp_id employees.employee_id%type) is
  select commission_pct
    from employees
   where employee_id = cv_emp_id
     for update of commission_pct nowait;
begin
  for v_c in c_emp_sal_update(v_emp_id) loop
    if v_c.add_months(sysdate, -3) = v_h_date then
      update employees
         set commission_pct = commission_pct + 0, 10
       where current of c_emp_sal_update;
    end if;
  end loop;
end upd_sal;
/

你能给我建议吗?

谢谢

4

1 回答 1

0

欢迎来到 PL/SQL 和 Oracle 误导性错误消息的世界;-)

我认为这只是一个错字和一个语法错误。添加 10% 应该类似于

set commission_pct = commission_pct * 1.10

其次,addmonthmuss 前面没有变量:

if add_months(sysdate, -3) = v_h_date then

顺便说一句,就个人而言,我会在一个语句而不是循环中更新所有员工,但这不是你的问题:-)

create or replace procedure upd_sal is
begin
  update employees
     set commission_pct = commission_pct * 1.1
   where add_months(trunc(sysdate), -3) = trunc(hire_date);
end upd_sal;
/
于 2021-04-11T21:41:36.587 回答