【发布时间】:2021-04-29 11:22:40
【问题描述】:
我有这个虚拟类型:
create or replace type Service_TY as object(
code INTEGER,
visit_analysis char(1)
)FINAL;
/
create or replace type Employee_TY as object(
dummy varchar(30)
)NOT FINAL;
/
create or replace type Doctor_TY UNDER Employee_TY(
ID INTEGER
)FINAL;
/
create or replace type Assistant_TY UNDER Employee_TY(
ID INTEGER
)FINAL;
/
create or replace type Habilitation_TY as object(
employee ref Employee_TY,
service ref Service_TY
)FINAL;
/
还有这些假表:
CREATE TABLE Service of Service_TY(
code primary key,
visit_analysis not null check (visit_analysis in ('v', 'a'))
);
/
CREATE TABLE Doctor of Doctor_TY(
ID primary key
);
/
CREATE TABLE Assistant of Assistant_TY(
ID primary key
);
/
CREATE TABLE Habilitation of Habilitation_TY;
/
我想创建一个触发器,当在 Habilitation 中插入新元组时,应该检查,如果员工是助理(而不是医生),则 visit_analysis 属性等于 'a' 以知道它是否是一个合法的元组。
我不知道如何查看Employee的类型(是医生还是助理)。
我会这样做:
create or replace
TRIGGER CHECK_HABILITATION
BEFORE INSERT ON HABILITATION
FOR EACH ROW
DECLARE
BEGIN
IF (:NEW.EMPLOYEE is of ASSISTANT_TY)
THEN
IF :NEW.SERVICE.visit_analysis = 'v'
THEN
raise_application_error(-10000, 'invalid tuple');
END IF;
END;
但它不起作用。
我应该如何检查该类型?
我得到的错误是:
Error(14,4): PLS-00103: Encountered the symbol ";" when expecting one of the following: if
【问题讨论】:
-
我注意到您在
CREATE TRIGGER语句之后没有/,这与您的所有其他语句不同。你真的执行了它并创建了触发器吗? -
是的,我已经执行过了,编译器告诉我 IF 语句中的一些随机错误
-
错误(14,4):PLS-00103:遇到符号“;”预期以下情况之一时:如果
-
最好编辑您的问题以包含错误消息。
标签: oracle plsql oracle11g triggers oracle-objects