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
...
答案 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';