我试着扣动扳机,但出了个错误。如果有人能向我解释一下我做错了什么,我将不胜感激。这是我大学毕业设计的一部分。
CREATE OR REPLACE TRIGGER NewTest_CaseEvent_Trigger
AFTER
INSERT
ON TESTRESULTS
FOR EACH ROW
DECLARE
NEW_CASEID Integer;
RESULT Char(3);
BEGIN
RESULT = :new.Result;
IF :new.PUIID IS IN (SELECT PUIID FROM CASE)THEN
SELECT CASEID INTO NEW_CASEID
FROM CASE
WHERE PUIID = :new.PUIID;
INSERT INTO CASEEVENT
(CASEEVENTID, CASEID, EventDate, EventComments, MethodOfCommunication, CreatedBy, CreationDate, LastUpdateBy, LastUpdateDate)
VALUES
(CASEEVENTID_PK.NextVal, New_CaseID, :new.Date, 'New Test Result Available: include here the test result',
Null, 'NewTest_CaseEvent_Trigger',SYSDATE,Null,Null);
ELSEIF RESULT = 'PST' THEN
INSERT INTO CASE
(CASEID, PUIID, ActivationDate, ClosingDate, ClosingReason, ExposureTypeID, CaseWorkerID, CreatedBy,CreationDate, LastUpdateBy, LastUpdateDate)
VALUES
(CASEID_PK.NextVal, :new.PUIID, SYSDATE,NUll,NUll,NUll,'NewTest_CaseEvent_Trigger',SYSDATE,NUll,NUll);
INSERT INTO CASEEVENT
(CASEEVENTID, CASEID, EventDate, EventComments, MethodOfCommunication, CreatedBy, CreationDate, LastUpdateBy, LastUpdateDate)
VALUES
(CASEEVENTID_PK.NextVal, CASEID_PK.CurrVal, :new.Date, 'New Test Result Available: include here the test result',
Null, 'NewTest_CaseEvent_Trigger',SYSDATE,Null,Null);
END IF;
END;
1条答案
按热度按时间mwyxok5s1#
你犯了一个错误这一事实没有多大用处。我们怎么猜是哪一个?
不管怎样,我试着复习你写的代码;下面是明显的错误:
你宣布
result char(3)
-当心char
数据类型右键填充值,空格最大为总列长度。更安全的选择是使用VARCHAR2
. 但是,如果这些结果真的是长度始终为3个字符的字符串,那么可以使用它。不是
result = :new.result
,但是result := :new.result
(缺少冒号)IF :new.PUIID IS IN (SELECT PUIID FROM CASE) THEN
-这里有两个错误:不能在此上下文中使用子查询。先弄清楚
:new.puiid
存在于case
表(这意味着您必须声明额外的局部变量),然后在中使用它IF
即使可以使用子查询,也不是if :new.puiid IS in
但是if :new.puiid in
(不带“是”)不是的
elseif
但是elsif
insert into case
这是错误的。您指定了11个要插入的列,但提供了10个值。修好它。insert into caseevent
:您正在插入:new.date
.date
列名称无效,因为它是为数据类型名称保留的。这似乎通常是错误的,除非在命名列时使用双引号,而且这也是错误的,因为在创建对象时应该避免在oracle中使用双引号因为我没有你的table,我无法测试。但是,下面的代码可能会起作用(如果您修复了“10个值分成11列”的问题)。