在SQL Plus中创建触发器

时间:2015-04-20 10:26:56

标签: sql oracle triggers oracle11g sqlplus

我在SQL Plus中创建了一个数据库,我想实现一些触发器,但是由于这些错误它们似乎没有工作,我搜索谷歌寻找无效的解决方案。你能帮忙吗?

这是我为触发器输入的内容。

create trigger test
after insert
or update of salary
on staff
for each row

declare
salarygrade number;

begin
select grade
into salarygrade
from salgrade
where :new.salary between losalary and hisalary;


exception
when no_data_found then
raise_application_error(-20001,
'salary not included within in salary grade');
when others then
raise_applciation_error(-20000,
'error has occured');
end;
/

触发器已创建,但编译错误,错误包括: 1. PLS-00103:当期待以下时遇到符号“then”。 2. PLS-00103:遇到以下情况时遇到符号“,”。

4 个答案:

答案 0 :(得分:1)

我能够创建触发器,在引发应用程序错误时出现了一些错误,我在没有它的情况下创建了它,您可以使用raise_application_error的正确语法修改更改。

SQL> create or replace trigger test
    after insert
    or update of salary
    on staff
    for each row

    declare
    salarygrade number;

     begin
     select grade
     into salarygrade
     from salgrade
     where :new.salary between losal and hisal;

     end;
     /

Trigger created.

答案 1 :(得分:0)

缺少分号
and hisalary <= :new.salary

答案 2 :(得分:0)

您在选择语句末尾缺少分号。

虽然我们正在使用它,您确定您的select语句不会返回多行吗?你的意思是and hisalary >= :new.salary? (如果是这样,整个where子句可以重写where :new.salary between losalary and hisalary

答案 3 :(得分:0)

尝试使用CREATE OR REPLACE触发器用新的代码覆盖旧代码。