Oracle数据类型
数值类型(NUMBER):表示数字类型
语法:NUMBER(p
2024年04月25日
1.什么类型就放什么值,否则会发生类型转换,导致性能问题!
存放字符的字段就设置varchar2类型
存放数值的字段就设置number类型
存放日期的字段就设置date类型
举例:设置ID为varchar2类型,并为之设置普通索引,模拟插入10000条数据
2024年04月25日
--存储过程,调用日志存储过程在第2个
CREATE OR REPLACE PROCEDURE SP_WA_BDXSRYGLB(V_ETLDATE IN VARCHAR2 --执行日期
,V_RETURN OUT NUMBER --0=成功,-1=失败
,V_MSG OUT VARCHAR2 --如果报错,返回报错原因及代码
)
--------------------------------------------------------------------
--功能名称 : 表关联表完整性数据跑批
--执行周期 : 平台实时调用
--创建日期 : 2020/12/30
--源表 : W_JGBDDZB;BDXSRYGLB
--目标表 : W_BDXSRYGLB
--功能描述 : 进行表的拆分处理
--版本历史 : 1.0
--作者 : PH
--------------------------------------------------------------------
IS
V_DATE_ID DATE := TO_DATE(V_ETLDATE, 'YYYYMMDD'); --执行日期
V_SCHEMA VARCHAR2(10) ; --目标表所属用户
V_PROC_START_FLAG VARCHAR2(10) ; --运行开始标记符 00:运行
V_PROC_STOP_FLAG VARCHAR2(10) ; --运行开始标记符 01:结束
V_LOG_RUN_PNAME VARCHAR2(40) ; --存储过程英文名称
V_LOG_RUN_STEP NUMBER ; --执行步数
V_LOG_RUN_TABNAME VARCHAR2(40) ; --目标表名
V_LOG_RUN_OPRTTYP VARCHAR2(10) ; --操作类型
V_LOG_RUN_MSG VARCHAR2(1024) ; --返回状态信息:执行步骤/步骤+报错信息
V_LOG_RUN_MSGFLAG VARCHAR2(10) ; --错误信息
V_LOG_RUN_COUNT NUMBER ; --总次数
V_LOG_RUN_BEGIN_TIME DATE ; --开始时间
V_LOG_RUN_RECDATE DATE ; --步骤执行时间戳
V_LOG_RUN_ETL_DATE DATE ; --ETL执行日期
BEGIN
V_SCHEMA := 'EAST' ;
V_PROC_START_FLAG := '00' ;
V_PROC_STOP_FLAG := '01' ;
V_LOG_RUN_PNAME := 'SP_WA_BDXSRYGLB' ;
V_LOG_RUN_TABNAME := 'W_BDXSRYGLB' ;
V_LOG_RUN_OPRTTYP := '' ;
V_LOG_RUN_ETL_DATE := TO_DATE(V_ETLDATE,'YYYYMMDD') ;
V_LOG_RUN_BEGIN_TIME := SYSDATE ;
--插入存储过程运行日志
ETL.SP_DMD_PROCEDURE_LOG(V_DATE_ID ,V_SCHEMA ,V_LOG_RUN_PNAME ,V_PROC_START_FLAG);
--启用oracle并行
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL 16';
EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL 16';
V_LOG_RUN_STEP := 1 ;
V_LOG_RUN_BEGIN_TIME := SYSDATE ;
V_LOG_RUN_OPRTTYP := 'DELETE';
-----------------------------------------/STEP-1:删除当前批次数据/------------------------------
DELETE FROM W_BDXSRYGLB T WHERE T.SJBSPCH = V_ETLDATE;
V_LOG_RUN_COUNT := SQL%ROWCOUNT ;
V_LOG_RUN_MSG := '执行STEP' || V_LOG_RUN_STEP || '成功';
V_LOG_RUN_RECDATE := SYSDATE ;
V_LOG_RUN_MSGFLAG := 'SUCCESS' ;
ETL.SP_DMD_PROCEDURE_STEP_LOG(V_LOG_RUN_PNAME --程序名称
,V_LOG_RUN_STEP --执行步数
,V_LOG_RUN_TABNAME --表名称
,V_LOG_RUN_OPRTTYP --数据操作类型 DELETE=删除 INSERT=新增 UPDATE=更新 SP=调用存储
,V_LOG_RUN_MSG --信息描述
,V_LOG_RUN_MSGFLAG --信息标志 FAILED=错误标识 SUCCESS=正常标志
,V_LOG_RUN_COUNT --记录条数
,V_LOG_RUN_BEGIN_TIME --开始时间
,V_LOG_RUN_RECDATE --运行日志时间
,V_LOG_RUN_ETL_DATE) --数据日期
;
COMMIT;
V_LOG_RUN_STEP := 2 ;
V_LOG_RUN_BEGIN_TIME := SYSDATE ;
V_LOG_RUN_OPRTTYP := 'INSERT';
-----------------------------------------/STEP-2:插入完整关联表数据/------------------------------------
INSERT INTO W_BDXSRYGLB(
LSH --流水号
,BXJGDM --保险机构代码
,BXJGMC --保险机构名称
,XSRYDM --销售人员代码
,XSRYXM --销售人员姓名
,YYXSRYDM --银邮销售人员代码
,YYXSRYXM --银邮销售人员姓名
)SELECT/*+parallel(8)*/
T.LSH --流水号
,T.BXJGDM --保险机构代码
,T.BXJGMC --保险机构名称
,T.XSRYDM --销售人员代码
,T.XSRYXM --销售人员姓名
,T.YYXSRYDM --银邮销售人员代码
FROM D0508_BDXSRYGLB T;
V_LOG_RUN_COUNT := SQL%ROWCOUNT ;
V_LOG_RUN_MSG := '执行STEP' || V_LOG_RUN_STEP || '成功';
V_LOG_RUN_RECDATE := SYSDATE ;
V_LOG_RUN_MSGFLAG := 'SUCCESS' ;
ETL.SP_DMD_PROCEDURE_STEP_LOG(V_LOG_RUN_PNAME --程序名称
,V_LOG_RUN_STEP --执行步数
,V_LOG_RUN_TABNAME --表名称
,V_LOG_RUN_OPRTTYP --数据操作类型
,V_LOG_RUN_MSG --信息描述
,V_LOG_RUN_MSGFLAG --信息标志 failed-错误标识 success-正常标志
,V_LOG_RUN_COUNT --记录条数
,V_LOG_RUN_BEGIN_TIME --开始时间
,V_LOG_RUN_RECDATE --运行日志时间
,V_LOG_RUN_ETL_DATE) --数据日期
;
COMMIT;
V_RETURN := 0 ;
YDETL.SP_DMD_PROCEDURE_LOG(V_DATE_ID, V_SCHEMA, V_LOG_RUN_PNAME, V_PROC_STOP_FLAG);
-----------------------------------------------/异常处理/-----------------------------------------
EXCEPTION
WHEN OTHERS THEN
ROLLBACK ;
V_LOG_RUN_MSG := 'STEP =' || V_LOG_RUN_STEP || ',ORAERROR = ' || SQLCODE || ',' || SQLERRM(SQLCODE);
V_LOG_RUN_RECDATE := SYSDATE ;
V_LOG_RUN_MSGFLAG := 'FAILED' ;
ETL.SP_DMD_PROCEDURE_STEP_LOG(V_LOG_RUN_PNAME --程序名称
,V_LOG_RUN_STEP --执行步数
,V_LOG_RUN_TABNAME --表名称
,V_LOG_RUN_OPRTTYP --数据操作类型
,V_LOG_RUN_MSG --信息描述
,V_LOG_RUN_MSGFLAG --信息标志 failed-错误标识 success-正常标志
,V_LOG_RUN_COUNT --记录条数
,V_LOG_RUN_BEGIN_TIME --开始时间
,V_LOG_RUN_RECDATE --运行日志时间
,V_LOG_RUN_ETL_DATE) --数据日期
;
V_RETURN := -1 ;
V_MSG := V_LOG_RUN_MSG;
ETL.SP_DMD_PROCEDURE_LOG(V_DATE_ID, V_SCHEMA, V_LOG_RUN_PNAME, V_PROC_STOP_FLAG);
END;
2024年04月25日
2024年04月25日
之前整理总结的关于日常巡检方面内容,主要分五块,第一块是对数据库基本情况的检查,下面介绍下相关命令,有点多,大家可以参考下:
1、查看数据库实例状态
2024年04月25日
Oracle是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
Oracle基本概念:
2024年04月25日
时间日期的前后台不一致问题,oracle数据库 插入和查询的时候拿到的时间和存储值不一致,今天直接上代码。
一、前台格式化代码
//将后台传过来的 日期时间 格式化方法 //显示完整的 yyyy-mm-dd hh:mm:ss function formatime(oldDate) { if(!oldDate){ return; } if(typeof(oldDate) === 'string'){ //这里要注意你的格式是什么,这个CST不要写错了 oldDate = oldDate.replace("CST","GMT+0800"); var now = new Date(oldDate); var year = now.getFullYear(); var month = now.getMonth()+1; var day = now.getDate(); var hours = now.getHours(); if(hours <= 9){ hours = "0" + hours; } var minutes = now.getMinutes(); if(minutes <= 9){ minutes = "0" + minutes; } var seconds = now.getSeconds(); if(seconds <= 9){ seconds = "0" + seconds; } if(month <= 9){ month = "0" + month; } if(day <= 9){ day = "0" +day; } return "" + year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds + ""; } } 二、后台数据库插入问题 oracle 数据库在你的 类中 Date 类型上面加上 1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 2.@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss" ) 这两个注解