繁体   English   中英

用函数Oracle触发

[英]Trigger with a function Oracle

如果批准的学生,我需要触发插入“ A”,如果未经批准的学生,则需要插入“ R”。 我需要使用一个返回“ A”或“ R”的函数。 这是我的功能:

create or replace function check_grade
(grade in number, frequency in number) return varchar2
as 
result varchar2(1) default '';
begin
if(grade>=6) and (frequency>=0.75)then
result := 'A';
else
result := 'R';
end if;
return result;
end;

这是我的触发器:

create or replace trigger situation
before 
insert on student
for each row
begin
select check_grade(grade, frequency)
into : new.situation
from dual;
end;

当我尝试执行时,总是会出现错误。 我不知道该怎么办!

触发器中允许使用用户定义的函数,并且您的函数看起来不错。

触发器的一个明确问题是它提到了gradefrequency ,它们是变量名,尚未声明。 我假设您可能打算使用插入的列值:new.grade:new.frequency

另外,我总是使用简单的变量赋值来设置“新”值( :new.value := blah而不是从:new.value := blah select blah into :new.value from dual )。 您的方法可能有效(或可能无效-我不知道),但是简单的变量赋值语法要短得多,并且很容易阅读。

因此,尝试替换以下三行:

select check_grade(grade, frequency)
into : new.situation
from dual;

...用这一行:

:new.situation := check_grade(:new.grade, :new.frequency);

如果这不起作用,请更新问题,并用错误ORA- <act-error-number>替换“我总是遇到错误” 包括堆栈跟踪,它将显示函数或触发器是否正在抛出。

这里不需要该功能; 可以用CASE表达式代替:

create or replace trigger situation
  before insert on student
  for each row
begin
  :new.situation := CASE
                      WHEN grade >= 6 and frequency >= 0.75 THEN 'A'
                      ELSE 'R';
                    END;
end situation;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM