【问题标题】:Trigger compilation error触发编译错误
【发布时间】:2015-04-25 17:40:28
【问题描述】:

我需要一些帮助来创建触发器。

create or replace trigger trigger_one 
before insert on Funtom_timesheet
for each row
Declare
V_id    number;
V_hours number;
Begin
Select max(timesheet_ID)+1 into v_id from Funtom_timesheet
:new.timesheet_ID :=v_id;
select grade_hours into V_hours
from funtom_grade join funtom_employee
on emp_grade = grade_id
where empid = :new.timesheet_emp;
if V_hours >:new.timesheet_hours
else
:new.timesheet_overtime :=
:new.timesheet_hours-V_hours
:new.timesheet_hours:= V_hours;
END IF;
END;
/

请告诉我我的代码的哪一部分是错误的,以便我可以处理它, 谢谢

【问题讨论】:

  • 您遇到的错误是什么?或者是什么问题?
  • 看看 Janis 的回答。请尝试自己解决问题,因为这是一个语法问题
  • 我已经在这个帖子中发布了这个问题,供大家帮助我,你们能告诉我语法错误的确切位置吗,谢谢
  • 您使用的是什么客户端工具?如果是 SQL*Plus,则编译触发器,然后键入 show errors 以获取特定错误。获取错误的方法可能因客户而异。
  • LINE/COL 错误 -------- ------------------------------ ----------------------------------- 16/5 PLS-00049:错误的绑定变量“NEW.TIMESHEET_OVERTIME”

标签: sql database oracle error-handling datatrigger


【解决方案1】:

您有许多语法错误 - 缺少 ;thenif 不能只有else 部分且没有表达式。

CREATE OR REPLACE TRIGGER TRIGGER_ONE
  BEFORE INSERT ON FUNTOM_TIMESHEET
  FOR EACH ROW
DECLARE
  V_ID    NUMBER;
  V_HOURS NUMBER;
BEGIN
  SELECT MAX(TIMESHEET_ID) + 1 INTO V_ID FROM FUNTOM_TIMESHEET;
  :NEW.TIMESHEET_ID := V_ID;
  SELECT GRADE_HOURS
    INTO V_HOURS
    FROM FUNTOM_GRADE
    JOIN FUNTOM_EMPLOYEE
      ON EMP_GRADE = GRADE_ID
   WHERE EMPID = :NEW.TIMESHEET_EMP;
  IF V_HOURS > :NEW.TIMESHEET_HOURS THEN
    NULL;
  ELSE
    :NEW.TIMESHEET_OVERTIME := :NEW.TIMESHEET_HOURS - V_HOURS;
    :NEW.TIMESHEET_HOURS    := V_HOURS;
  END IF;
END;
/

最好使用 SEQUENCES 代替:

SELECT MAX(TIMESHEET_ID) + 1 INTO V_ID FROM FUNTOM_TIMESHEET;
:NEW.TIMESHEET_ID := V_ID;

选择与插入的同一表格时,您可以获得突变触发器 error(http://www.dba-oracle.com/t_avoiding_mutating_table_error.htm

【讨论】:

  • 你能告诉我错误吗,因为我不知道它们到底在哪里,这就是我发布这个问题的原因。
  • 错误是错误的绑定变量'NEW.TIMESHEET_OVERTIME'
  • FUNTOM_TIMESHEET 表是否包含 TIMESHEET_OVERTIME 列?如果是,那么您可以尝试在FOR EACH ROW之前添加REFERENCING OLD AS OLD NEW AS NEW
猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多