ORACLE是否可以通过触发器执行存储过程?

时间:2020-02-05 05:23:30

标签: oracle stored-procedures triggers

ORACLE是否可以从触发器执行存储过程?

嗨,我正在尝试从触发器执行存储过程。 我已经测试了存储过程,并且工作正常:

EXECUTE ESCRIBE_INVENTARIO;

然后创建触发器:

CREATE OR REPLACE TRIGGER REPORTUSER.VENTA_ECOMMERCE 
AFTER UPDATE ON  INVOICE FOR EACH ROW

BEGIN
ESCRIBE_INVENTARIO;
END;
/

但是当我编译它时,出现了这个错误:

触发VENTA_ECOMMERCE编译

LINE/COL  ERROR
--------- -------------------------------------------------------------
2/1       PL/SQL: Statement ignored
2/1       PLS-00201: identifier 'ESCRIBE_INVENTARIO' must be declared
Errores: comprobar log de compilador

我不知道如何声明存储过程。

这是存储过程的头,没有过程主体。

CREATE OR REPLACE PROCEDURE ESCRIBE_INVENTARIO
IS
    EXISTE NUMBER; -- CREACIÓN DE LA VARIABLE QUE VERIFICA SI YA SE GENERO EL INVENTARIO DIARIO

    BEGIN

    SELECT (SELECT COUNT(BANDERA_CONTROL) FROM REPORTUSER.CONTROL_INVENTARIO_V WHERE TRUNC(FECHA) = TRUNC(SYSDATE) AND BANDERA_CONTROL = 1) INTO EXISTE FROM DUAL;

        IF EXISTE = 0 THEN

...

1 个答案:

答案 0 :(得分:2)

是的,绝对有可能从触发器执行一个过程。

我只能在这里想象的唯一原因是REPORTUSER无法访问该过程。

尝试授予执行权限给报告用户

grant execute on ESCRIBE_INVENTARIO to REPORTUSER;

并在触发代码中将所有者名称放在过程名称之前,例如

begin
  owner.escrive_inventario;
end;

所有者名称可以从dba_objects中获取

select owner, object_name from dba_objects where object_name = 'ESCRIBE_INVENTARIO';