嘿家伙我不能让这个触发器工作,我已经工作了一个小时左右,并且无法找出我出错的地方,任何帮助将不胜感激
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:触发器规范无效
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或任何编程背景.我想你开始使用一些示例代码并尝试将其修改为某种东西.但你真的留下了胡言乱语.我开始认为这是家庭作业.