Oracle中没有找到数据错误

ksg*_*ksg 1 oracle

我正在尝试将数据插入到oracle数据库(版本11g xe).但是当我尝试使用toad执行该过程时,我得到的错误是'ORA-01403:没有找到数据'.这是我的代码

CREATE OR REPLACE PROCEDURE ACTSINFO.sp_Insert_WorkDetails 
(p_workname IN varchar ,
p_workaddress IN varchar)
IS
BEGIN   
   insert into workdetails (workname,workaddress) values (p_workname,p_workaddress);
END sp_Insert_WorkDetails;
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下statememt执行该过程

EXEC sp_Insert_WorkDetails('test','test');
Run Code Online (Sandbox Code Playgroud)

此外,我已经为table workdetails中的workdetailsid自动增量定义了一个触发器和序列

顺序如下

 ALTER SEQUENCE ACTSINFO.WORKDETAILS_WORKID_SEQ
 INCREMENT BY 1
 MINVALUE 0
 MAXVALUE 9999999999999999999999999999
 NOCACHE
 NOCYCLE
 NOORDER
Run Code Online (Sandbox Code Playgroud)

触发如下

DROP TRIGGER ACTSINFO.WORKDETAILS_INSERT;
CREATE OR REPLACE TRIGGER ACTSINFO.WORKDETAILS_INSERT
BEFORE INSERT
ON ACTSINFO.WORKDETAILS
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
  SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS;
END;
Run Code Online (Sandbox Code Playgroud)

我是oracle的新手.请帮助我......

a_h*_*ame 7

您的触发器是问题:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS;
Run Code Online (Sandbox Code Playgroud)

如果workdetails中没有行,则select将不返回任何内容.更糟糕的是,如果你的workdetails表有多行,这也将失败.

你真的想要以下内容:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM dual;
Run Code Online (Sandbox Code Playgroud)

或 - 如果你是11克 - 那么你可以使用:

:NEW.WORKID := WORKDETAILS_WORKID_SEQ.NEXTVAL;
Run Code Online (Sandbox Code Playgroud)