【问题标题】:PL/SQL Error ORA-01403 no data foundPL/SQL 错误 ORA-01403 未找到数据
【发布时间】:2013-12-27 11:45:27
【问题描述】:

在创建以下触发器后尝试插入表时,我收到 ORA-01403 no data found 错误:

CREATE OR REPLACE TRIGGER unic_disc
BEFORE insert ON disciplina
FOR EACH ROW
DECLARE
    CURSOR cursor_professor IS 
    SELECT matricula_professor
    FROM disciplina;
    temp_prof disciplina.matricula_professor%type;
BEGIN
    OPEN cursor_professor;
    FETCH cursor_professor INTO temp_prof;
    CLOSE cursor_professor;
END;
/

(变量是葡萄牙语,但它们的名称不会影响逻辑。) 表创建,

CREATE TABLE disciplina (
    codigo_disciplina NUMBER,
    ementa VARCHAR2(50) NOT NULL,
    conteudo_programatico VARCHAR2(100) NOT NULL,
    matricula_professor NUMBER NOT NULL,
    CONSTRAINT disciplina_pk PRIMARY KEY (codigo_disciplina),
    CONSTRAINT disciplina_matricula_prof_fk FOREIGN KEY (matricula_professor)         REFERENCES professor (matricula_professor)
);

我的插入查询:

INSERT INTO disciplina (codigo_disciplina,ementa,conteudo_programatico,matricula_professor) VALUES (7,'E6', 'C6',7777);

编辑:我认为错误是因为我从正在编辑的同一个表中进行选择。

【问题讨论】:

  • 桌上还有其他触发器吗?
  • 您确定要以这种方式使用光标而不是对其进行迭代吗?
  • 还有其他触发器,而我实际使用的触发器更复杂,为了查找错误,我对其进行了简化。在实际的触发器中,我遍历光标。

标签: oracle plsql triggers


【解决方案1】:

我只需要在 DECLARE 之后添加 PRAGMA_AUTONOMOUS_TRANSACTION 就可以了。一个朋友告诉我,我自己找不到。

【讨论】:

  • 你在哪里添加的?
  • 就在“DECLARE”之后
  • 如果您编辑答案以包含该信息,我可以删除我的反对票。
【解决方案2】:

是的,您正在使用触发器(在插入之前),最初该表没有任何数据并且

当您尝试在表中插入数据时,触发器在插入之前触发,它

返回您没有找到任何记录。如果您确切指定您的要求,我会

尝试帮助您编写代码。

【讨论】:

  • 这个触发器是在表格被填充到一定程度后添加的。要求是“创建一个触发器,该触发器不允许插入其教授已经与另一个学科保持联系的学科”。
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 2014-03-28
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多