小编Lis*_*a14的帖子

在PL/SQL中创建触发抛出编译错误

我以用户ADMIN身份登录并执行PROCEDURE P1来检查和捕获日志.我在创建触发器时遇到错误

PROCEDURE P1
IS
BEGIN
INSERT statement
BEGIN
---
EXCEPTION

WHEN others THEN
  error_mgr.record_error();
 END P1;
Run Code Online (Sandbox Code Playgroud)

AS ADMIN用户没有足够的priveledge我作为另一个用户EXTRACT登录并创建了包error_mgr

create or replace
PACKAGE BODY error_mgr
IS
PROCEDURE record_error
 IS
 PRAGMA AUTONOMOUS_TRANSACTION;
 l_code  INTEGER := SQLCODE;
 l_mesg VARCHAR2(32767) := SQLERRM; 
 BEGIN
 INSERT INTO EXTRACT.error_log 
(created_on,created_by,errorcode,callstack,errorstack,backtrace,error_info) 
 VALUES(SYSDATE,USER,l_code,sys.DBMS_UTILITY.format_call_stack,null,
  sys.DBMS_UTILITY.format_error_backtrace,l_mesg);
        DBMS_OUTPUT.PUT_LINE('ERROR!!');  
COMMIT;
END record_error;
END error_mgr;
Run Code Online (Sandbox Code Playgroud)

注意:EXTRACT也是用户名和架构

提取模式中的ERROR LOG表有一个自动生成列id(LOG_ID)所以在EXTRACT模式中我使用的是序列和触发器

  SEQUENCE:
   CREATE SEQUENCE "EXTRACT"."SEQ_error_log" MINVALUE 1 MAXVALUE 
  9999999999999999999999999999 INCREMENT BY 1 START WITH 335 CACHE 20 NOORDER 
CYCLE ;
Run Code Online (Sandbox Code Playgroud)

触发:

 CREATE TRIGGER EXTRACT.BI_error_log
 BEFORE INSERT …
Run Code Online (Sandbox Code Playgroud)

database oracle triggers plsql packages

1
推荐指数
1
解决办法
53
查看次数

标签 统计

database ×1

oracle ×1

packages ×1

plsql ×1

triggers ×1