我正在尝试调用以下存储过程...
CREATE OR REPLACE PROCEDURE PRC_EXAMEN_SUELDO(fecha_hoy varchar2)
AS
BEGIN
IF fecha_hoy= 'WEDNESDAY' then
RAISE_APPLICATION_ERROR(-20777, 'Los ' || fecha_hoy ||' no se puede cambiar el sueldo');
END IF;
END;
...在此触发器内:
CREATE OR REPLACE TRIGGER TRG_EXAMEN_SUELDO
BEFORE UPDATE OF SALARY ON EMPLOYEES
FOR EACH ROW
DECLARE
HOY VARCHAR(50);
BEGIN
HOY:= TO_CHAR (SYSDATE, 'DAY');
execute PRC_EXAMEN_SUELDO (HOY);
END;
但是会引发以下错误:
LINE / COL ERROR
--------- ----------------------------------------- --------------------
5/13 PLS-00103:预期以下情况之一时遇到符号“ PRC_EXAMEN_SUELDO”:
:=。 (@%;立即
要继续使用符号“:=”代替“ PRC_EXAMEN_SUELDO”。
错误:检查编译器日志
我正在使用Oracle的HR模式。
该过程的目的是检查发送的日期是否等于sysdate的日期。如果是,它将激活错误。
据说,在编译以下代码后:
set serveroutput on;
update employees set salary = salary + 100 where employee_id = 100;
触发器应根据sysdate检查是否可以完成更改。否则,它将引发指定的错误。
存储过程正常工作,但触发器不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
EXECUTE是一个SQL * Plus命令(Docs),用于临时执行存储过程
set serveroutput on
exec hello -- hello is a procedure that simply dbms_output 'hello' back
我在SQL Developer中以脚本或在交互式外壳程序(例如SQL * Plus或SQLcl)中运行它,
hello
PL/SQL procedure successfully completed.
但是这些客户端具有一个命令解释器,用于处理“ exec”,这是EXECUTE的缩写。它不是PL / SQL语言的一部分。
在触发器主体中,您只需执行以下操作:
CREATE OR REPLACE TRIGGER TRG_EXAMEN_SUELDO
BEFORE UPDATE OF SALARY ON EMPLOYEES
FOR EACH ROW
DECLARE
HOY VARCHAR(50);
BEGIN
HOY:= TO_CHAR (SYSDATE, 'DAY');
PRC_EXAMEN_SUELDO (HOY);
END;