Sql 触发器调用过程错误
我的扳机有点问题。我创建了一个程序来检查工资是否在某个范围内。如果它不在某个范围内,则引发异常。问题是,即使过程编译时没有错误,触发器也找不到过程Sql 触发器调用过程错误,sql,oracle,stored-procedures,triggers,oracle10g,Sql,Oracle,Stored Procedures,Triggers,Oracle10g,我的扳机有点问题。我创建了一个程序来检查工资是否在某个范围内。如果它不在某个范围内,则引发异常。问题是,即使过程编译时没有错误,触发器也找不到过程 set serveroutput on; create or replace procedure check_salary ( tmp_id in varchar2, tmp_sal in number ) IS v_sal number(6,0) := tmp_sal; v_min number(6,0); v_max numb
set serveroutput on;
create or replace procedure check_salary (
tmp_id in varchar2,
tmp_sal in number
)
IS
v_sal number(6,0) := tmp_sal;
v_min number(6,0);
v_max number(6,0);
ex_fail exception;
cursor cur_select is
select min_salary, job_id, max_salary
from jobs where job_id = tmp_id;
BEGIN
for rec_something in cur_select loop
v_min := rec_something.min_salary;
v_max := rec_something.max_salary;
if v_sal >= v_min and v_sal <= v_max then
raise ex_fail;
end if;
end loop;
exception
when ex_fail then
dbms_output.put_line('Invalid salary ' || v_sal || ' must be between ' || v_min || ' and ' || v_max ||'.');
END;
/
show errors;
create or replace trigger check_salary_trg
after insert or update on employees
for each row
declare
begin
IF UPDATING or INSERTING THEN
execute check_salary(:NEW.job_id, :NEW.salary);
end if;
end;
/
show errors;
将其更改为:
create or replace trigger check_salary_trg
after insert or update on employees
for each row
begin
IF UPDATING or INSERTING THEN
check_salary(:NEW.job_id, :NEW.salary);
end if;
end;
/
在PL/SQL块中执行过程时,不使用
EXECUTE syntax
有关执行的更多信息,请查看以下链接
堆栈溢出异常是由于使用了
dbms\u输出。请将行
放入检查
过程中
SQL*Plus命令set serveroutput on
默认保留较小的大小,您必须指定缓冲区大小或删除dbms\u输出。从检查过程中放入行
要增加默认缓冲区大小,请使用以下命令:
将serveroutput设置为1000000大小
尝试使用调用
而不是执行
EXECUTE syntax