【问题标题】:"No data found" error during execute the procedure in oracle trigger在 oracle 触发器中执行过程期间出现“未找到数据”错误
【发布时间】:2020-05-23 17:30:53
【问题描述】:

我有一个不同的触发器,并希望为不同的模式执行程序以提取数据。

使用触发器中的参数执行过程不起作用。

create or replace TRIGGER TRIGER_LEAD_INSERT
  AFTER INSERT ON AT_NEO_CM.LEAD_INFORMATION 
    FOR EACH ROW
DECLARE 
  --PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN

  IF :new.LEAD_REFERENCE_NUMBER IS NOT NULL THEN    
      AT_NEO_CAS_LMS.PKG_LEAD_DATA.USP_INSERT_NEWAPP(:NEW.LEAD_REFERENCE_NUMBER,:NEW.ID );   
END IF;

  EXCEPTION 
    WHEN NO_DATA_FOUND THEN 

       INSERT INTO LEADDATA VALUES(  :NEW.ID, :NEW.LEAD_REFERENCE_NUMBER,2322, 'NO DATA FOUND');

END TRIGER_LEAD_INSERT;

在过程中使用具有相同主键的另一个表作为参数传入过程中。

【问题讨论】:

  • 您能否详细说明executing procedure with parameter in triggre is not working. 到底发生了什么(或没有发生)?该程序的预期目的是什么?
  • 另外,您使用的是哪个版本的 Oracle?它可能会影响答案。
  • 我在数据库 Test 和 Test1 中有两个模式,Test 有一个触发应用的表 Lead_information,而 test1 有表 Leaddata,我试图在另一个模式中的 Leaddata 中插入少量信息。哪个没有插入,而且我在同一个 test1 模式中使用参数但值没有通过这个过程,因为在触发器中找不到数据错误。
  • 我不清楚什么代码会在您的触发器中引发 NO_DATA_FOUND 异常,没有 SELECT...
  • 程序有 select 语句会引发异常。未找到作为参数传入过程的相同 id 的数据

标签: oracle plsqldeveloper


【解决方案1】:

要从另一个模式调用过程,您只需要设置正确的授权:

CREATE USER u1 IDENTIFIED BY u1 QUOTA 1M ON USERS;
CREATE USER u2 IDENTIFIED BY u2 QUOTA 1M ON USERS;
GRANT CONNECT, RESOURCE TO u1;
GRANT CONNECT, RESOURCE TO u2;

用户u1有一个过程p1并将其授予用户u2

CREATE PROCEDURE p1(p NUMBER) AS BEGIN NULL; END p1;
GRANT EXECUTE ON p1 TO u2;

用户u2 现在可以执行此过程:

CONNECT u2/u2;
EXEC u1.p1(1);

或在触发器中使用它:

CREATE TABLE t2 (id NUMBER);

CREATE OR REPLACE TRIGGER tr2 AFTER INSERT ON t2
  FOR EACH ROW
BEGIN
  IF :new.id IS NOT NULL THEN    
    u1.p1(:new.id); 
  END IF; 
END tr2;
/

【讨论】:

  • 正在工作。当触发器执行并从另一个表中提取数据时,当我要使用该 id 并提取数据然后手动获取数据时,它会抛出错误。
  • 您可以编辑您的问题并添加错误消息吗?
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2017-03-26
  • 2020-01-28
相关资源
最近更新 更多