-
2021-05-01 07:37:39
场景:
oracle存储过程执行中输出日志文件
create or replace procedure p_outputdebug(a varchar2,b varchar2,c varchar2)
is
vFileName varchar2(100);
OutputFile UTL_FILE.FILE_TYPE;
begin
select 'rfid_'||a.rfid||'.log'
into vFileName
from tbl_animal_info a where a.rfid='330100000078176'
;
OutputFile := utl_file.fopen('background_dump_dest',vFileName,'a');
utl_file.putf(OutputFile,a,b,c);
utl_file.fflush(OutputFile);
utl_file.fclose(OutputFile);
end ;
SQL> create or replace directory "background_dump_dest"as 'D:\database\cares100\bdump';
Directory created
SQL> grant read on directory "background_dump_dest" to myuser;
Grant succeeded
SQL> grant write on directory "background_dump_dest" to myuser;
Grant succeeded
SQL> call myuser.p_outputdebug('1','1','1');
Method called
--需要注意的一点是:日志目录需创建在oracle所在服务器上,否则报错。
UTL_FILE.FOPEN 用法
参考http://blog.csdn.net/cnham/article/details/5927700
我的异常网推荐解决方案:oracle存储过程,http://www.myexceptions.net/oracle-develop/177537.html
更多相关内容 -
oracle记录存储过程日志的方法
2018-04-24 09:37:57本包用于记录存储过程里面的日志,将日志信息写入日志表(mylog)。可以记录日志时间、过程名称、过程里面记录日志的行数、参数值。如果在异常处理部分记录日志,还可以记录异常代码、异常原因、异常产生的行数。 本人... -
oracle数据库中查看系统存储过程的方法
2020-09-10 15:24:27主要介绍了oracle数据库中查看系统存储过程的方法,需要的朋友可以参考下 -
oracle存储过程错误日志
2019-10-31 15:04:38转载别人的,在这里记录一下 ...第一步、创建日志表,用来存放oracle存储过程的日志 create table TBL_WLF_SYS_LOG ( S_TIME VARCHAR2(32) not null, S_LEVEL VARCHAR2(32), S_PROCNAME VARCHAR2(64), ...转载别人的,在这里记录一下
原文链接第一步、创建日志表,用来存放oracle存储过程的日志
create table TBL_WLF_SYS_LOG ( S_TIME VARCHAR2(32) not null, S_LEVEL VARCHAR2(32), S_PROCNAME VARCHAR2(64), S_MSG VARCHAR2(4000), S_ADVICE VARCHAR2(1024) ) tablespace TBS_WLF_DAT; -- Add comments to the table comment on table TBL_WLF_SYS_LOG is '存储过程日志表'; -- Add comments to the columns comment on column TBL_WLF_SYS_LOG.S_TIME is '操作时间'; -- Add comments to the columns comment on column TBL_WLF_SYS_LOG.S_LEVEL is '操作级别'; -- Add comments to the columns comment on column TBL_WLF_SYS_LOG.S_PROCNAME is '执行存储过程名称'; -- Add comments to the columns comment on column TBL_WLF_SYS_LOG.S_MSG is '错误信息'; -- Add comments to the columns comment on column TBL_WLF_SYS_LOG.S_ADVICE is '建议信息';
第二步、建立日志存储过程
CREATE OR REPLACE PROCEDURE prc_wlf_sys_writelog( i_flag INTEGER, i_id INTEGER, str_procname varchar2, str_msg varchar2, str_advice varchar2 ) IS -- 操作时间 str_time varchar2(32); -- 操作级别 str_level varchar2(32); -- 执行存储过程名称 p_procname varchar2(1024); -- 错误信息,或者记录信息 p_msg varchar2(1024); -- 建议信息 p_advice varchar2(1024); BEGIN IF (i_flag = 2 AND i_id >= 1 AND i_id <= 4) THEN CASE WHEN i_id = 1 THEN str_level := 'log'; WHEN i_id = 2 THEN str_level := 'debug'; WHEN i_id = 3 THEN str_level := 'alarm'; ELSE str_level := 'error'; END CASE; p_procname := str_procname; p_msg := str_msg; p_advice := str_advice; ELSE str_level := 'error'; p_procname := 'p_public_writelog'; p_msg := 'writelog_error'; p_advice := ''; END IF; str_time := to_char(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'); INSERT INTO tbl_wlf_sys_log (s_time, s_level, s_procname, s_msg, s_advice) VALUES (str_time, str_level, p_procname, p_msg, p_advice); COMMIT; END prc_wlf_sys_writelog; /
第三步、在我们自己的存储过程中,调用日志存储过程(第二步中的)
加粗的是要求加上的CREATE OR REPLACE PROCEDURE A_select1( --传入实参 p_orgIds IN VARCHAR2, p_period IN VARCHAR2, p_userId IN VARCHAR2, p_result OUT VARCHAR2) IS v_orgId VARCHAR2(32); v_qty INTEGER; v_finish_qty INTEGER; v_status INTEGER; v_month_report_num INTEGER; v_date VARCHAR2(32); v_date2 VARCHAR2(32); v_date3 VARCHAR2(32); v_date4 VARCHAR2(32); v_date5 VARCHAR2(32); -- debug信息 v_debugmsg varchar2(1024); -- 错误信息 v_errmsg varchar2(1024); CURSOR c_orgIds IS select a.ORG_ID org_id from base_hs_health_org a left join (select distinct u.ref_id as org_id from com_user u left join com_user_role ur on u.id = ur.user_id left join com_role r on r.id = ur.role_id where r.id = '099d0eae68464cd59d83caed570a823f') H on a.org_id = H.ORG_ID where H.ORG_ID is not null start with a.org_id = p_orgIds connect by prior a.org_id = parent_id; begin **-- 存储过程开始日志 v_debugmsg := 'A_select1 begin log- '; prc_wlf_sys_writelog(2, 2, 'A_select1', v_debugmsg, '');** p_result := 0; ---遍历所有上报机构 OPEN c_orgIds; LOOP FETCH c_orgIds INTO v_orgId; EXIT WHEN c_orgIds%NOTFOUND; BEGIN -- 表示输出buffer不受限制。 DBMS_OUTPUT.ENABLE(buffer_size => null); -- DBMS_OUTPUT.PUT_LINE(v_orgId); --- 清除原有数据 --- delete from rhsa_hs4_import_detail --- where period = p_period --- and org_id = v_orgId; v_date4:=dbms_utility.get_time; ---填报数量 select count(*) into v_qty from RHSA_HS4_1_2013_TEMP where org_id = v_orgId and period in (select * from table(splitstr(p_period,','))); -- 计算时间差 v_date5:=dbms_utility.get_time; dbms_output.put_line('时间差: '||(v_date5-v_date4)|| ' 毫秒 ' ||' 机构id: '||v_orgId|| ' v_qty: '||v_qty); END; END LOOP; CLOSE c_orgIds; p_result := 1; **-- 存储过程开始日志 v_debugmsg := 'A_select1 end log- '; prc_wlf_sys_writelog(2, 2, 'A_select1', v_debugmsg, '');** EXCEPTION WHEN OTHERS THEN p_result := 0; **begin rollback; v_errmsg := 'sqlexception~~sqlcode:' || to_char(sqlcode) || ' sqlstate:' || substr(sqlerrm, 1, 512); prc_wlf_sys_writelog(2, 4, 'A_select1', v_errmsg, ''); end;** end;
-
oracle 存储过程记录执行日志
2019-06-11 18:06:16创建一个序列,用于标识[存储过程,函数,触发器]执行先后顺序 create sequence SEQ_PROGRAM_EXECUTE_LOG minvalue 1 maxvalue 1000000000000 ...创建日志表,用于存储[存储过程,函数,触发器]执行日志 CREATE TABL...本文主要介绍如何记录存储过程执行详细日志,统计存储过程执行时间,实现逻辑如下:
- 创建一个序列,用于标识[存储过程,函数,触发器]执行先后顺序
create sequence SEQ_PROGRAM_EXECUTE_LOG minvalue 1 maxvalue 1000000000000 start with 1 increment by 1 cache 100 cycle order;
- 创建日志表,用于存储[存储过程,函数,触发器]执行日志
CREATE TABLE PROGRAM_EXECUTE_LOG ( PROGRAM_NAME VARCHAR2(1000), IS_SUCCEED CHAR(1), LOG_DATE DATE, EXECUTE_MSG CLOB, TIME_CONSUMING NUMBER, EXECUTE_ORDER NUMBER, EXECUTE_BEGINTIME TIMESTAMP(6), EXECUTE_ENDTIME TIMESTAMP(6), PROCESS_FLAG VARCHAR2(10) DEFAULT 'N' ); -- Add comments to the table comment on table PROGRAM_EXECUTE_LOG is '过程、函数、触发器执行性能日志'; -- Add comments to the columns comment on column PROGRAM_EXECUTE_LOG.program_name is '程序名称'; comment on column PROGRAM_EXECUTE_LOG.is_succeed is '执行结果(成功Y,失败N)'; comment on column PROGRAM_EXECUTE_LOG.log_date is '日志时间'; comment on column PROGRAM_EXECUTE_LOG.execute_msg is '执行详细信息'; comment on column PROGRAM_EXECUTE_LOG.time_consuming is '耗时'; comment on column PROGRAM_EXECUTE_LOG.execute_order is '流水号-SEQ_PROGRAM_EXECUTE_LOG'; comment on column PROGRAM_EXECUTE_LOG.execute_begintime is '执行开始时间'; comment on column PROGRAM_EXECUTE_LOG.execute_endtime is '执行结束时间'; comment on column PROGRAM_EXECUTE_LOG.process_flag is '处理标识(已处理Y,未处理N)'; CREATE INDEX PROGRAM_EXECUTE_LOG_IDX1 ON PROGRAM_EXECUTE_LOG (EXECUTE_ORDER); CREATE INDEX PROGRAM_EXECUTE_LOG_IDX2 ON PROGRAM_EXECUTE_LOG (TIME_CONSUMING);
- 创建计算耗时的函数
CREATE OR REPLACE FUNCTION F_TIMESTAMP_DIFF(ENDTIME IN TIMESTAMP, STARTTIME IN TIMESTAMP) RETURN INTEGER AS STR VARCHAR2(50); MISECOND INTEGER; SECONDS INTEGER; MINUTES INTEGER; HOURS INTEGER; DAYS INTEGER; BEGIN STR := TO_CHAR(ENDTIME - STARTTIME); MISECOND := TO_NUMBER(SUBSTR(STR, INSTR(STR, ' ') + 10, 3)); SECONDS := TO_NUMBER(SUBSTR(STR, INSTR(STR, ' ') + 7, 2)); MINUTES := TO_NUMBER(SUBSTR(STR, INSTR(STR, ' ') + 4, 2)); HOURS := TO_NUMBER(SUBSTR(STR, INSTR(STR, ' ') + 1, 2)); DAYS := TO_NUMBER(SUBSTR(STR, 1, INSTR(STR, ' '))); RETURN DAYS * 24 * 60 * 60 * 1000 + HOURS * 60 * 60 * 1000 + MINUTES * 60 * 1000 + SECONDS * 1000 + MISECOND; END;
- 创建日志记录过程
CREATE OR REPLACE PROCEDURE SYS_SAVELOG(PROGRAM_NAME VARCHAR2, --过程名称 IS_SUCCEED VARCHAR2, --是否执行成功 Y|N EXECUTE_MSG CLOB, --过程执行信息 BEGIN_TIME TIMESTAMP --过程开始执行TIMESTAMP ) AS V_PROGRAM_NAME VARCHAR2(1000) := SUBSTRB(PROGRAM_NAME, 1, 1000); --过程名称 V_IS_SUCCEED CHAR(1) := SUBSTR(IS_SUCCEED, 1, 1); --过程执行成功表示 Y N V_BEGIN_TIME TIMESTAMP := BEGIN_TIME; PRAGMA AUTONOMOUS_TRANSACTION; --日志开启自治事务,不影响业务逻辑事务 /* 调用方式: 1.正常日志:PROC_SAVELOG(V_PROC_NAME, 'Y', '执行成功。。。',V_BEGIN_TIME); 2.异常日志:PROC_SAVELOG(V_PROC_NAME, 'N', SQLERRM,V_BEGIN_TIME); */ BEGIN INSERT INTO PROGRAM_EXECUTE_LOG (PROGRAM_NAME, IS_SUCCEED, LOG_DATE, EXECUTE_MSG, --已改为CLOB TIME_CONSUMING, --EXECUTE_ORDER, EXECUTE_BEGINTIME, EXECUTE_ENDTIME) VALUES (V_PROGRAM_NAME, V_IS_SUCCEED, SYSDATE, EXECUTE_MSG, F_TIMESTAMP_DIFF(SYSTIMESTAMP, V_BEGIN_TIME), --PROGRAM_EXECUTE_LOG_SEQ.NEXTVAL, V_BEGIN_TIME, SYSTIMESTAMP); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END;
- 异常日志处理存储过程
CREATE OR REPLACE PROCEDURE SYS_PROCESS_ERRMSG(PROC_NAME VARCHAR2, --过程信息 EXE_MSG CLOB, --执行信息 ERR_MSG VARCHAR2, --错误信息 BEGIN_TIME TIMESTAMP, --过程开始执行TIMESTAMP RESULT OUT VARCHAR2) AS /*faith@2016.11.24用于处理异常信息,方便后续扩展 1.执行信息中添加ERR_MSG 2.执行记录日志过程 3.错误信息赋值给返回结果RESULT 调用方式: SYS_PROCESS_ERRMSG(V_PROC_NAME, V_EXE_MSG,V_ERR_MSG,V_BEGIN_TIME,RESULT); */ V_EXE_MSG CLOB := EXE_MSG; BEGIN RESULT := 'OK'; --如果错误信息长度为0,返回OK IF LENGTH(ERR_MSG) = 0 OR ERR_MSG IS NULL THEN RETURN; END IF; DBMS_LOB.APPEND(V_EXE_MSG, ERR_MSG || CHR(10)); SYS_SAVELOG(PROC_NAME, 'I', V_EXE_MSG, BEGIN_TIME); ROLLBACK; RESULT := ERR_MSG; EXCEPTION WHEN OTHERS THEN RESULT := '处理异常信息发生错误!'; END;
- 使用样例
PROCEDURE SYS_SAVELOG_EXAMPLE(PLAN_DATE IN DATE, CONFIRM IN VARCHAR2, RESULT OUT VARCHAR2) AS V_PLAN_DATE DATE := PLAN_DATE; V_CONFIRM VARCHAR2(10) := CONFIRM; --CONFIRM标识, Y:报工确认 N:报工解锁 V_ERR_MSG VARCHAR2(1000); V_BEGIN_TIME TIMESTAMP := SYSTIMESTAMP; V_PROC_NAME VARCHAR2(1000) := 'SYS_SAVELOG_EXAMPLE/' || TO_CHAR(V_PLAN_DATE, 'YYYY-MM-DD HH24:MI:SS') || '/' || V_CONFIRM; V_EXE_MSG CLOB; BEGIN DBMS_LOB.CREATETEMPORARY(V_EXE_MSG, TRUE); --初始化CLOB RESULT := 'OK'; IF V_CONFIRM = 'Y' THEN V_ERR_MSG := '不允许确认今天或者今天之后的数据!'; --今天或者 GOTO PROCESS_ERRMSG; END IF; COMMIT; DBMS_LOB.APPEND(V_EXE_MSG, '执行成功!'); SYS_SAVELOG(V_PROC_NAME, 'Y', V_EXE_MSG, V_BEGIN_TIME); --异常处理 RETURN; --若为顺序执行到此位置,则直接返回 <<PROCESS_ERRMSG>> SYS_PROCESS_ERRMSG(V_PROC_NAME, V_EXE_MSG, V_ERR_MSG, V_BEGIN_TIME, RESULT); EXCEPTION WHEN OTHERS THEN V_ERR_MSG := SUBSTR(SQLERRM, 1, 160); DBMS_LOB.APPEND(V_EXE_MSG, V_ERR_MSG); SYS_SAVELOG(V_PROC_NAME, 'N', V_EXE_MSG, V_BEGIN_TIME); RESULT := V_ERR_MSG; --错误号对应的信息 END;
- PLSQL 中文乱码解决
select userenv('language') from dual; -- 配置环境变量 -- NLS_LANG=sql查询出来的值
-
Oracle存储过程中调用日志存储过程
2018-03-15 17:04:48在写存储过程中一般需要书写过程运行日志,但是工作这么长时间自己从没认真研究过调用日志存储过程的问题。现因项目整合需要做日志监控,才发现日志的重要性:create or replace procedure bo_dw.sp_sys_log ( oi_...在写存储过程中一般需要书写过程运行日志,但是工作这么长时间自己从没认真研究过调用日志存储过程的问题。现因项目整合需要做日志监控,才发现日志的重要性:
create or replace procedure bo_dw.sp_sys_log ( oi_task_id in out integer , iv_task_name in varchar2, iv_table_name in varchar2, iv_task_sign in varchar2, ii_task_status in integer , iv_task_log in varchar2, iv_task_pos in varchar2, iv_task_step_stime in varchar2, ii_rowcount in integer default null ) /** HEAD * @name sp_sys_log * @caption 日志记录 * @type 日志 * @parameter oi_task_id inout integer 任务ID,任务状态为1时做输出参数,任务状态为0和其它时做输入参? * @parameter iv_task_name in varchar2 任务名称 * @parameter iv_table_name in varchar2 目标表名 * @parameter iv_task_sign in varchar2 任务标志,任务的统计时间 * @parameter ii_task_status in integer 任务状态,0 程序运行完成,1 程序运行中,其它 出错代码 * @parameter iv_task_log in varchar2 任务日志,正常时为程序运行中或程序运行完成,出错时为出错信息 * @parameter iv_task_pos in varchar2 任务位置,程序中的出错位? * @parameter ii_rowcount int integer 数据量,可选参数, 缺省值为NULL * @description 日志记录 * @target vgopsys#tb_sys_log 单条日志表 */ is PRAGMA AUTONOMOUS_TRANSACTION; vv_task_memo varchar2(2000) ; begin /** --表结构 create table bo_dw.tb_sys_log ( task_id number, -- 任务ID task_name varchar2(30), -- 程序名称 table_name varchar2(30), -- 目标表名 task_sign varchar2(20), -- 任务标志 start_time date, -- 程序开始时间 end_time date, -- 程序结束时间或出错时? task_status number, -- 任务状态 1开始 0完成 其他失败 task_log varchar2(200), -- 任务日志:正常时为程序运行中或程序运行完成,出错时为出错信息 task_pos varchar2(50), -- 任务位置 task_remark varchar2(2000) -- 任务备注: 任务位置:开始时间yyyymmdd :数据量 (分隔符chr(10)) ); 序号 -- Create sequence create sequence seq_sys_proc_log maxvalue 9999999999999999999999 start with 1 increment by 1; */ /** @description 对不同的任务状态,进行不同的日志处理 */ vv_task_memo :='起止时间:'||iv_task_step_stime||' - '||to_char(sysdate,'dd hh24:mi:ss')||'|'|| '位置:'||iv_task_pos||'|'||'sql记录数:'||ii_rowcount; if ii_task_status = 1 then select bo_dw.seq_sys_proc_log.nextval into oi_task_id from dual; insert into bo_dw.tb_sys_log ( task_id, -- 任务ID task_name, -- 程序名称 table_name, -- 目标表名 task_sign, -- 任务标志 start_time, -- 程序开始时间 end_time, -- 程序结束时间或出错时间 task_status, -- 任务状态 task_log, -- 任务日志 task_pos, -- 任务位置 task_memo ) values ( oi_task_id , iv_task_name , iv_table_name , iv_task_sign , sysdate , null , 1 , '程序运行中' , iv_task_pos , vv_task_memo ); elsif ii_task_status = 2 then update bo_dw.tb_sys_log set task_pos = iv_task_pos, task_memo= task_memo || chr(10) || vv_task_memo where task_id = oi_task_id; elsif ii_task_status = 0 then update bo_dw.tb_sys_log set end_time = sysdate, task_status = 0, task_log = '程序运行完成', task_pos = iv_task_pos, task_memo= task_memo || chr(10) || vv_task_memo where task_id = oi_task_id; else update bo_dw.tb_sys_log set end_time = sysdate, task_status = ii_task_status, task_log = substr(iv_task_log, 1, 200), task_pos = iv_task_pos /*, task_memo= task_memo || chr(10) || vv_task_memo*/ where task_id = oi_task_id; end if; commit; end;
这是一个例子,认真琢磨一下还是能明白的。这里在procedure定义中有个PRAGMA AUTONOMOUS_TRANSACTION,百度解释为 自治事务 。对于定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序。
自治事务的特点:
第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。
第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。
关于自治事务解释来源链接:点击打开链接
-
Oracle存储过程实现记录日志
2021-04-30 08:05:09Oracle存储过程实现记录日志create table-- Create tablecreate table t_cem_proc_logs(id varchar2(32),proc_mc varchar2(100),title varchar2(4000),content clob,log_type varchar2(10),log_time date default s.... -
如何在oracle存储过程中逐行打印
2021-05-08 20:21:41我正在执行一个存储过程,但它在某个时候失败了, 当前... 例如:如何在oracle存储过程中逐行打印create or replace-- decaring required variablePROCEDURE "PROC_DATA_TABLE_DETAILS" ISFOR TABLEDETAILS IN (SELE... -
ORACLE数据库存储过程记录错误日志
2019-08-16 17:26:37目前主程序的大部分存储过程都是使用ZL_ErrorCenter来处理程序异常,但是ZL_ErrorCenter的主要功能... 在业务交互平台等三方接口的运行和调试过程中,虽然本身业务交互平台有日志记录,但是查询和定位问题并不是... -
基于Oracle存储过程与触发器的三维空间数据日志管理方法.pdf
2021-10-10 06:48:52基于Oracle存储过程与触发器的三维空间数据日志管理方法.pdf -
oracle存储过程执行时,如何获得详细的错误信息
2021-05-01 07:37:48错误:1. a.非匿名的PLSQL块,is/as后面直接跟变量定义b.只是匿名的PLSQL块才以declare开头c.在任何的PLSQL块内部可以在BEGIN 。。。END之间再定义PLSQL块嵌套,嵌套的PLSQL块可以带DECLARE进行定义所以你的代码中的... -
oracle job 查询 存储过程
2021-01-27 02:32:06Oracle开发与使用文章收藏收集一些Oracle开发与使用文章,以便于后续查找.【基础类】1.ORACLE函数大全2.Orace常用函数3.oracle 日期函数介绍4.Oracle中常用的to_Char用法详解(有FMT的详细列表)5.ORACLE中日期和时间... -
ORACLE存储过程遇到不合规数据跳过记录到日志然后继续插入合规数据
2019-08-28 15:42:44请大神写一个详细示例。要不然我看不懂,急急急 急。有没有 oracle前辈 花点时间,有偿有偿指导一下我。...正常insert会存储过程报错,四条都插不进去,我想继续执行把其他三条正常插入,报错那一条记录的到日志 -
Oracle存储过程导出结果到文本文件
2018-09-13 09:42:03在存储过程中,我们经常会使用dbms_output来输出一些调试信息到控制台,方便查看。在使用PLSQL DEV的过程中,经常会遇到缓冲区太小的情况,如果你要显示的内容比较多的话。这个时候我们可以使用oracle提供的UTL_FILE... -
查看Oracle 存储过程编译有错误信息
2021-05-02 03:39:44创建一个存储过程有错误,在哪里看:SQL> create or replace procedure p_test(u_name in varchar2,t_bytes in number) is2 v_name varchar2(20);3 objectname varchar2(20);4 v_bytes number;5 begin6 v_name :=... -
oracle存储过程语法
2018-10-29 16:39:33前两天无意见看见了一个非常适合学习Oracle附上链接:...Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREAT... -
oracle存储过程施行中输出日志文件
2021-05-05 02:45:24oracle存储过程执行中输出日志文件create or replace procedure p_outputdebug(a varchar2,b varchar2,c varchar2)isvFileName varchar2(100);OutputFile UTL_FILE.FILE_TYPE;beginselect 'rfid_'||a.rfid... -
ORACLE 存储过程异常捕获并抛出
2021-05-06 01:54:07当前情况是,循环表,进行删除,如果出现表不存在,则会异常中断,导致整个存储过程挂掉,需求是要能跳过错误的执行,不进行处理,进行下个循环。最终代码:for tab_name in tables loopbeginexecut... -
Oracle 存储过程、存储函数 与原生 JDBC 调用
2019-06-02 11:58:541、存储过程是自定义的且封装在数据库服务器上的 PLSQL 代码片段,它已经编译好了,可以像调用数据库函数一样来调用存储过程,可以给它传递参数,它也可以有返回值。 2、因为存储过程是编译好放在数据库服务器上的... -
ORACLE存储中记录日志
2015-01-20 18:18:06自已写的可在ORACLE存储过程中记录运行日志工具包,调用方便简单。 -
oracle存储过程执行中输出日志文件
2016-05-07 13:30:00create or replace procedure p_outputdebug(a varchar2,b varchar2,c varchar2) is vFileName varchar2(100); OutputFile UTL_FILE.FILE_...--需要注意的一点是:日志目录需创建在oracle所在服务器上,否则报错。 -
一文搞懂oracle存储过程、函数、触发器和程序包
2022-02-21 21:09:42相较于oracle,mysql的存储过程就显得比较鸡肋了,所以系统的学习了一下,写下本文记录一下,以后也可以翻看学习,本文所用到的例子均来自oracle11g自带的scott模式,话不多说,直接开始! 一、存储过程 1、简介 ... -
Oracle存储过程中异常Exception的捕捉和处理
2020-05-20 15:32:28WHEN OTHERS THEN v_ErrorText := sqlcode|| SQLERRM|| ‘存储过程[Proc_Update_ID_NO]执行失败!’; RAISE_APPLICATION_ERROR(-20003,v_ErrorText); –raise; v_OUT := v_ErrorText ; END Proc_error_process; ... -
MybatisPlus中调用Oracle存储过程
2019-12-31 08:58:11由于需要将新数据同步到另外的数据库,所以需要使用dblink进行操作,但是dblink不支持写入操作,因此需要调用写好的存储过程才能实现将新数据插入新数据的同时插入旧数据库。 准备工作 预先准备好新旧两个数据库 旧... -
oracle创建存储过程循环插入多组数据
2022-03-30 10:55:16Oracle---number数据类型讲解 create table Computers ( comNo number(4) constraint pk_comp primary key, compModel varchar2(64) constraint unique_comp unique, buyTime date, price number(12,2) ... -
Oracle-归档日志详解(运行模式、分类)
2017-02-15 10:48:54oracle 归档日志详解,包括允许模式,分类等。 -
shell脚本批量调度Oracle存储过程
2019-05-10 18:57:41本程序批量调度Oracle存储过程,支持定时调度任务,处理存储过程调度过程中的依赖关系。 1. run_prc.sh #!/bin/bash #author zhangbingkai #2018.10.14 v_prc_call=$1 v_date=$2 shell_dir=$3 V_ORACLE_HOME=`... -
202101 如何查询存储过程调用的历史记录
2021-01-08 14:39:11自己的见解 如果存储过程需要多次执行(重复被调用) 那么,一般会以 jobs的...间接地可以查询到存储过程被调用的历史记录。 select * from user_scheduler_job_run_details; 还可以看到每个job 到底花费了多长时间 -
在ORACLE里用存储过程定期分割表
2020-03-04 09:47:55Oracle数据库里存放着各种各样的数据,其中有一些数据表会随着时间的推移,越来越大。如交友聊天的日志、 短信收发的日志、生产系统的日志、动态网站发布系统的日志等等。... 本文将介绍用存储过程定期分割表的方法。 -
Oracle数据库查看日志
2021-04-30 08:27:45Automatic Diagnostic Repository (ADR),ADR 基目录中可以包含多个ADR 主目录,其中每个ADR 主目录都是一个根目录,用于存放特定Oracle 产品或组件的特定实例的全部诊断数据。另外,还生成了两个预警文件。一个是...