为什么这个触发器不能正常工作?

时间:2016-05-04 00:29:44

标签: sql oracle plsql triggers oracle-sqldeveloper

从我读到的有关触发器及其工作方式的内容中,我认为在我将值插入其中后,此触发器会将数据插入与我的表phonenumber相关的关系中。我正在使用dbms_random创建一个随机的5位使用ID,该ID在使用表中尚未存在(或者至少是我认为它会做的)。

create table phoneNumber(phoneNumber varchar(12) PRIMARY KEY, primaryNumber varchar(12));

create table acct_num(acctID numeric(5) references ACCOUNT, primaryNumber varchar(12) references ACCOUNT,  phoneNumber varchar(12) references phoneNumber);

create table phone_usage(usageID varchar(5) references USAGE, phoneNumber varchar(12) references PHONENUMBER)

但是当我尝试插入phoneNumber表时,它会抛出以下错误:

  

ORA-01403:未找到数据

     

ORA-06512:at“ADDPHONELINE”,第9行

     

ORA-04088:执行触发'ADDPHONELINE'

时出错

相关表格创建如下:

val grouped = rdd.reduceByKey(math.max(_, _))

3 个答案:

答案 0 :(得分:1)

您的触发器基于表phoneNumber上的插入和错误"未找到数据"当使用SELECT INTO并且它没有找到要插入的任何信息时抛出。

所以问题必须是这个陈述。

select acctID, primaryNumber into acctNum, primNum
from account A
where A.primaryNumber = :new.primaryNumber;

您确定此触发器处于活动状态时:new.primaryNumber表中是否存在account

也许你只是在插入完成后才填充account表?

答案 1 :(得分:0)

根据您发布的错误说明,以下查询不返回任何行。您的:new.primaryNumber不正确或帐户表中没有匹配的记录。

Begin 
   select acctID, primaryNumber into acctNum, primNum
    from account A
    where A.primaryNumber = :new.primaryNumber;
exception when others then
  insert your favorite logging method here logging out your :new.primaryNumber
end;

答案 2 :(得分:0)

我在这里向您展示当dbms_random给出一个值(NEWusageID_new)时会发生什么,该值存在于用法中:

DECLARE
   i   NUMBER;
BEGIN
   SELECT 15 INTO i FROM DUAL
   MINUS
   SELECT 15 FROM DUAL;
END;

ORA-01403: no data found
ORA-06512: in line 4

改为使用序列。