【问题标题】:No Data Found Error in OracleOracle 中未找到数据错误
【发布时间】:2012-01-23 12:34:19
【问题描述】:

我正在尝试将数据插入 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;

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

EXEC sp_Insert_WorkDetails('test','test');

我还为表 workdetails 中 workdetailsid 的自动增量定义了触发器和序列

顺序如下

 ALTER SEQUENCE ACTSINFO.WORKDETAILS_WORKID_SEQ
 INCREMENT BY 1
 MINVALUE 0
 MAXVALUE 9999999999999999999999999999
 NOCACHE
 NOCYCLE
 NOORDER

触发如下

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;

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

【问题讨论】:

  • 除非在该表上定义了TRIGGER,否则我看不出如何引发此异常。你能检查一下吗?您是否获得异常的堆栈跟踪?
  • 是的,我已经在 workdetails 中定义了一个用于自动增加 workdetailsid 的触发器

标签: oracle


【解决方案1】:

你的触发器是问题:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS;

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

您确实想要以下内容:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM dual;

或者 - 如果你使用 11g - 那么你可以使用:

:NEW.WORKID := WORKDETAILS_WORKID_SEQ.NEXTVAL;

【讨论】:

  • @RobvanWijk:谢谢。我新它在我当前的版本中工作,但我不知道它是什么时候添加的。
  • 你能解释一下你所说的双重触发是什么意思吗?它是任何类型的关键字吗?抱歉回复晚了...
  • @ksg:“你请”是什么意思?双表请看说明书:docs.oracle.com/cd/E11882_01/server.112/e25789/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多