
Develop
文章平均质量分 72
nsj820
这个作者很懒,什么都没留下…
展开
-
利用临时表、REF游标、动态SQL实现分页查询
<br />1、用到的源表表结构<br /> -- Create tablecreate table CUSTOMER( CUST_ID VARCHAR2(32) not null, CREATE_TIME TIMESTAMP(6) not null, CUST_NAME VARCHAR2(512), POINT_CMIS_ID VARCHAR2(20),原创 2010-06-26 14:48:00 · 1430 阅读 · 1 评论 -
Oracel通用函数
<br />1、NVL函数<br />NVL函数的格式如下:NVL(expr1,expr2)<br />含义是:【取第一个不为空的参数】=>如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值;如果两参数都为空,则显示空。<br />例:<br />select nvl('1','2') from dual;<br />2、NVL2函数<br />NVL2函数的格式如下:NVL2(expr1,expr2, expr3)<br />含义是:【与NVL有很大的原创 2011-01-15 16:06:00 · 1184 阅读 · 0 评论 -
oracle的异常处理
<br />oracle提供了预定义例外、非预定义例外和自定义例外三种类型。其中<br />l 预定义例外用于处理常见的oracle错误;<br />l 非预定义例外用于处理预定义所不能处理的oracle错误;<br />l 自定义例外处理与oracle错误无关的其他情况。<br />Oracle代码编写过程中,如果捕捉例外则会在plsql块内解决运行错误,否则将错误传递到调用环境。常用预定义例外:<br />为了处理各种常见的oracle错误,plsql为开发人员提供了二十多个预定义例外,每个预定义原创 2011-02-17 23:31:00 · 2257 阅读 · 0 评论 -
一个利用oracle异常处理的函数
<br />函数主体如下:<br /> CREATE OR REPLACE FUNCTION fn_get_agmt_bal(p_agmt_no varchar2)RETURN NUMBER IS v_bal NUMBER := 0; --在SQL/PLUS中执行时,若合dbms_output生效,需先执行【SET SERVEROUTPUT ON】;BEGIN select agmt_bal into v_bal from edw_t01_agmt_bal_h原创 2011-02-18 07:07:00 · 1261 阅读 · 0 评论 -
oracle插入多表(insert all/first)
1、建测试表 CREATE TABLE EDW_INT( AGMT_NO VARCHAR2(40 BYTE) NOT NULL, AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL, NEED_REPAY_INT NUMBER(22,2), CURR_PERIOD NUMBER(4) NOT NULL);CREATE TABL原创 2011-03-10 19:34:00 · 7965 阅读 · 0 评论 -
行列转换两例的思考
1、多行转成一列(1)、建测试表及插入测试数据 create table t(i int,a varchar2(1));insert into t(i,a)select 1,'a' from dualunion allselect 1,'b' from dualunion allselect 1,'d' from dualunion allselect 1,'e' from dualunion allselect 2,'z' from dualunion all原创 2011-03-13 11:50:00 · 910 阅读 · 0 评论 -
ORACLE层次查询学习
层次查询的概念<br />语法格式:<br />select [level], column, expr... from table<br />[where condition]<br />start with condition<br />connect by [prior column1= column2 |<br />column1 = prior column2];<br />层次查询是通过start with和connect by子句标识的:<br />1.其中level关键字是可选的,表示等级,原创 2011-04-02 21:07:00 · 17398 阅读 · 2 评论 -
Oracle分页技术
<br />1、使用两层嵌套<br /> SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM edw_t100_bal_all) A WHERE ROWNUM <= 40) WHERE RN >= 21;<br />2、使用between..and..<br /> SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM edw_t1原创 2011-04-04 11:04:00 · 992 阅读 · 0 评论 -
oracle分析函数学习
0、建表及插入测试数据 --CREATE TEST TABLE AND INSERT TEST DATA.create table students(id number(15,0),area varchar2(10),stu_type varchar2(2),score number(20,2));insert into students values(1, '111', 'g', 80 );insert into students values(1, '111', 'j',原创 2011-04-03 14:21:00 · 1139 阅读 · 0 评论 -
ORACLE中判断表是否存在再删除表避免报错与MySql和SqlServer的不同
不同数据库中drop a table if it exists的不同:In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft’s SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS’.MySQL:DROP TABLE IF EXIS原创 2011-04-08 07:19:00 · 28208 阅读 · 0 评论 -
Orace及SqlServer的多表关联更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新;而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。一、MS SQL Server 多表关联更新sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式中引用要更新的表以外的其它数据。一般形式:update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B原创 2011-04-24 08:10:00 · 2256 阅读 · 0 评论 -
ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习
<br />1、UNION和UNION ALL的使用与区别<br />如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union的作用是将多个结果合并在一起显示出来。<br />union和union all的区别是union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。<br />2、三大结果集处理方式概述<br />Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则原创 2011-04-23 15:10:00 · 1855 阅读 · 0 评论 -
oracle sql语言模糊查询
在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很像...”的数据记录,以下是可使用的通配符:% 零或者多个字符_ 单一任何字符(下划线)/ 特殊字符[] 在某一范围内的字符,如[0-9]或者[aeth][^] 不在某范围内的字符,如[^0-9]或者[^aeth] 其中关于条件,SQL提供原创 2011-06-29 21:22:00 · 1113 阅读 · 0 评论 -
分析函数应用一例(查找状态全为1的ID)
1、 表结构和测试数据插入 建表:-- Create tablecreate table TAB_FXHS( id VARCHAR2(32), zt VARCHAR2(2));-- Add comments to the table com原创 2011-08-23 19:21:19 · 1955 阅读 · 0 评论 -
Oracle中表级列的默认值控制
<br />1、脚本及测试步骤<br /> --1、建测试表create table tab_default(id varchar2(2),default_sysdate date,default_char_date varchar2(8),default_guid varchar2(100));--2、添加默认值束缚alter table tab_default modify default_sysdate date default sysdate;alter table tab_defa原创 2011-01-11 18:41:00 · 2422 阅读 · 0 评论 -
LEFT JOIN后AND与WHERE的异同
1、AND 过滤之后再连接2、WHERE 连接之后再过滤下面以具体例子来说明:(1)、建表及插入测试数据 --建测试表create table FACT_TAB( ID INTEGER, STATUS VARCHAR2(8));create table DIM_STATUS( STSTUS_CLASS VARCHAR2(8), STATUS_CODE VARCHAR2(8), STATUS_DESC VARCHAR2(8));--插入测试数据in原创 2010-11-11 06:59:00 · 13563 阅读 · 0 评论 -
一个二维表查询的实现
<br />1、示例表结构及测试数据<br />create table ROW_COL_CONVER( CODE VARCHAR2(10), MONTH VARCHAR2(10), NUM VARCHAR2(10));insert into Row_Col_Conver (CODE, MONTH, NUM)values ('C00001', '200401', '3');insert into Row_Col_Conver (CODE, MONTH, NUM)valu原创 2010-07-04 14:09:00 · 4289 阅读 · 0 评论 -
JLBANK-IRS统计报表相关的两个存储过程
JLBANK-IRS统计报表相关的两个存储过程1、 债项评级统计报表 CREATE OR REPLACE PROCEDURE SP_DEBT_RATING_RESULT_QUERY(P_RATING_TIME VARCHAR2,P_ORGSEQ VARCHAR2,P_SMALL_CORP_LOAN_CD VARCHAR2,P_CUR OUT IRS_REF.T_CURSOR) ASV_ORGSEQ原创 2010-07-14 21:30:00 · 1156 阅读 · 0 评论 -
层次查询和分析函数(LAG、LEAD)在号段选取中的应用
1. 问题的提出在实际工作中,我们常常会碰到号段选取的问题,例如:一组连续的数,去掉中间一些数,要求出剩下的数的区间(即号段)例如:一串数字为1,2,3,4,7,9,10,则号段为1-4,7-7,9-10知道号段的起止,要求出该号段内所有的数例如:号段为1-3,15-15,则号段内所有的数为1,2,3,15一组数,中间可能有断点,要求出缺失的数例如:一串数字为1,2,3,4,7,9,10,则缺失的原创 2010-05-20 15:53:00 · 1595 阅读 · 0 评论 -
oracle的正则表达式(regular expression)
<br />当前,正则表达式已经在很多软件中得到广泛的应用,包括Linux, Unix,HP等操作系统,PHP,C#,Java等开发环境,ORACLE则在10G中推出了自己的正则表达式。<br />Oracle 10g正则表达式提高了SQL灵活性,有效的解决了数据有效性,重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题。<br />Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLAC原创 2010-06-24 12:35:00 · 771 阅读 · 0 评论 -
数据仓库拉链算法在ORACLE中的实现
1、拉链算法用到的相关表结构建表脚本(源表、目的表、临时表).sql --生成目标表create table EDW_T100_STATUS_H( ID VARCHAR2(8) not null, STATUS VARCHAR2(8) not null, START_DATE DATE not null, END_DATE DATE not null);--生成源表create table ODS_XT_ZT( ID原创 2010-09-10 23:50:00 · 14071 阅读 · 6 评论 -
ORACLE中SQL运算符的优先级
SQL运算符优先级:优先级1算术运算符2连接符3比较符4IS[NOT]NULL, LIKE, [NOT]IN5[NOT] BETWEEN6NOT7AND8OR注:1、可以使用括号改变优先级顺序2、可以看出OR的优先级最低,算术运算符的优先级最低另:操作符优先级 * / + - 1、乘除的优先级高于加减;2、同一优先级运算符从左向右执行;3、括号内的运算先执行。原创 2010-10-21 08:44:00 · 7460 阅读 · 2 评论 -
拉链表的展开算法
<br />在做数据仓库项目的过程中,有时候可能也会根据历史拉链表,展开为每天全量表;相当于一个还原的过程,即构建拉链表的反过程。<br />1、建表及插入测试数据语句<br /> --建表语句--生成EDW_T00_H表(历史拉链表)-- Create tablecreate table EDW_T00_H( ID VARCHAR2(2) not null, START_DATE DATE not null, STATUS VARCHAR2(2),原创 2010-12-16 18:32:00 · 5258 阅读 · 0 评论 -
仓库数据增量更新加载算法(支持混乱日期跑批)
<br />1、 建库及测试数据插入脚本<br /> --建增量更新目标表-- Create tablecreate table EDW_T100_BAL_IU( ID VARCHAR2(8) not null, BAL NUMBER(22,2), UPDATE_DT VARCHAR2(8));-- Add comments to the table comment on table EDW_T100_BAL_IU is '余额(增量更新原创 2010-12-17 16:08:00 · 3437 阅读 · 0 评论 -
计算字符在字符串中出现的次数
<br />1、通过lengthb和replace函数巧妙结合的自定义函数获取<br /> CREATE OR REPLACE FUNCTION STR_CNT_NISJ(MOTHER_CHAR VARCHAR2, SUB_CHAR VARCHAR2) RETURN NUMBER IS V_NUM NUMBER := 0;BEGIN SELECT (LENGTHB(MOTHER_CHAR) - LENGTHB(REPLACE(MOTHER_CHAR, SUB_CHAR, ''))) / LE原创 2010-10-31 07:28:00 · 894 阅读 · 0 评论 -
一分多行列转换
<br />问题描述:<br />将以下表方式存放的数据:<br />1<br />CMS8000290693<br />,011101251020006862,<br />2<br />CMS8000692449<br />,9011101012510200105,011201251020000015,041101251020000193,<br />3<br />CMS6000320019<br />,011101251010001452,9011101012510200100,901130101251原创 2010-10-31 07:53:00 · 809 阅读 · 0 评论 -
仓库拉链算法的数据恢复机制(重跑中间任意一天保证数据的准确完整性)
<br />1、 日志表、EDW目标表及临时表的创建<br /> --1、日志表的创建create table EDW_ETL_LOG_DETAIL( PROC_NAME VARCHAR2(50), P_ETLDATE VARCHAR2(20), ETL_MEMO VARCHAR2(10), ETL_RECORD_NUM INTEGER, ERR_MSG VARCHAR2(1000), ERR_S原创 2010-12-24 16:51:00 · 4988 阅读 · 4 评论 -
当前全量表与拉链表关联查询获取历史时刻准确数据实例
<br />在数据仓库中,一般不常或不会变动的信息存放在一个当前全量表中(当前全量表中也会存储常变重要信息,但那只是一个当前值),而经常会变动的重要的要记录历史的数据(如状态、余额等)一般存放在拉链表中。而如果要获取当前全量表的历史某一时刻的准确的全部数据信息,则要通过如下方式关联得到:<br /> SELECT '20100119' 数据日期, --数据日期 A.AGMT_NO 协议编号, --协议编号 A.AGMT_S原创 2010-12-28 14:03:00 · 10835 阅读 · 1 评论 -
历史拉链表的应用--余额历史中每日平均余额的算法
<br />在数据仓库中,协议余额历史等会以拉链表的形式存储数据,以节省空间;但对拉链表的应用,如计算每日平均余额要比每日全量表麻烦一些。本文针对余额历史表中每日平均余额的算法作一个深入的学习。<br />1、 建表及插入拉链表测试数据<br /> --1、历史拉链表建表-- Create tablecreate table EDW_T100_BAL_H( ID VARCHAR2(8) not null, START_DATE DATE not null, BAL原创 2011-01-01 20:42:00 · 7594 阅读 · 1 评论 -
Oracle Merge 使用
Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle10g中MERGE有如下一些改进:1、UPDATE或INSERT子句是可选的2、UPDATE和INSERT子句可以加WHERE子句3、在ON条件中使用常量过滤谓原创 2010-07-22 16:28:00 · 16304 阅读 · 3 评论