Sql Trigger麻烦

1 sql oracle triggers

嘿家伙我不能让这个触发器工作,我已经工作了一个小时左右,并且无法找出我出错的地方,任何帮助将不胜感激

CREATE OR REPLACE TRIGGER allergy

 BEFORE INSERT ON   

 DECLARE 
 med VARCHAR2(20);

 BEGIN

 SELECT  v.medication RCD.specify
 INTO  med
 FROM  visit v, relcondetails RCD
 WHERE :new.medication = v.medication AND RCD.specifiy = 'allergies';

 IF med = allergies THEN
  RAISE_APPLICATION_ERROR(-20000, 'Patient Is alergic to this medication');
 END IF;
END allergy;
Run Code Online (Sandbox Code Playgroud)

什么时候进入甲骨文

第6行的错误:ORA-04079:触发器规范无效

Ste*_*age 8

CREATE OR REPLACE TRIGGER allergy BEFORE INSERT ON   
Run Code Online (Sandbox Code Playgroud)

这里的表名

FOR EACH ROW -- forgot this too

DECLARE 
    med VARCHAR2(20);
Run Code Online (Sandbox Code Playgroud)

您应该将此声明为%type.

    med visit.medication%type;

 BEGIN

 SELECT  v.medication RCD.specify
Run Code Online (Sandbox Code Playgroud)

列之间需要逗号

    INTO  med
Run Code Online (Sandbox Code Playgroud)

两列需要两个变量

    FROM  visit v, relcondetails RCD
    WHERE :new.medication = v.medication AND RCD.specifiy = 'allergies';
Run Code Online (Sandbox Code Playgroud)

你的两张桌子之间没有连接条件,这非常糟糕.此查询将在两个表之间执行笛卡尔,然后返回所有在其各自列中具有"过敏"和:new.medication的笛卡儿.

您还可能需要一个过滤条件来限制查询到特定患者或特定访问.该查询将针对所有患者进行,并且他们的所有访问均为平方.

  IF med = allergies THEN
Run Code Online (Sandbox Code Playgroud)

我不知道这个IF中的/过敏/是什么.没有变量被定义为没有引号它不是一个字符串.

    RAISE_APPLICATION_ERROR(-20000, 'Patient Is alergic to this medication');
Run Code Online (Sandbox Code Playgroud)

此错误消息强化了我对您的查询所说的内容.你认为你是在询问一个病人,但你不是.

  END IF;
END allergy;
Run Code Online (Sandbox Code Playgroud)

说真的,如果你正在编写软件来拯救一个人免于可能危及生命的药物,那么请考虑其他一些工作.我发誓,我不是说这是粗鲁的,但你的代码示例几乎没有理解pl/sql语言或sql或任何编程背景.我想你开始使用一些示例代码并尝试将其修改为某种东西.但你真的留下了胡言乱语.我开始认为这是家庭作业.