用户自定义异常
用户自定义异常[@more@]create or replace procedure sp_insert_data01asj number;k number;excp exception;beginj:= 10;k:= 20;if j <= k thenraise excp;end if;for i in 1..1000000 loopinsert into tb_hxl_testvalues(i,to_char(i)||chr(i));end loop;exceptionwhen excp then begindbms_output.put_line('Error code: ' || sqlcode); dbms_output.put_line('Error description: ' || sqlerrm);rollback;end;insert into tb_hxl_log values('aa','bb'); -- 测试commit;end sp_insert_data01;
分段提交删除大批量数据
分段提交删除大批量数据[@more@]例子1:declare i integer; begin loop execute immediate 'delete from tb_name f_a=xxx and f_b=yyy and romnum<5000'; commit; select count(*) into i from tb_name f_a=xxx and f_b=yyy; exit when i=0; end loop; end;例子2:set serveroutput on Declare rcode integer; begin loop --每次将表a删除10000条记录 delete from a where exists (select usercode from b where a.usercode = b.usercode) and rownum < 10000; --每10000条提交一次 commit; exit when sql%rowcount = 0; end loop;
Oracle Instead of 触发器的使用
Oracle Instead of 触发器的使用[@more@]Oracle Instead of 触发器的使用转自:http://blogger.org.cn/blog/more.asp?name=RandomRen&id=20956我平时比较少用触发器,主要是因为程序逻辑不对的时候不容易发现错误,有时数据量大了也可能产生性能上的问题,但这个东西总有用武之地,在很多场合还是会起到巨大的作用。这两天就遇到一个问题,有两张表的一个字段需要进行同步更新,也就是A表修改时要把对应的B表的记录字段修改,反过来B表修改时也要把A表的修改,保持两边数据的一个同步,这个可以在前台很容易的实现,但开发人员不想修改
Grouping函数使用
Grouping函数使用[@more@] --三级汇总 insert into tb_test select $1 ,case when grouping (c.fee_area) = 1 then '0' when grouping (c.fee_area_name) = 1 then '0' when grouping (c.area_code) = 1 then c.fee_area when grouping (c.area_code_name) = 1 then c.fee_area else c.area_code end as "organize_id" ,case when grouping (c.fee_area) = 1 then '9' when grouping (c.fee_area_name) =
分析函数
分析函数[@more@]Oracle 分析函数使用介绍分析函数是oracle816引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在只要一条简单的sql语句就可以实现了,而且在执行效率方面也有相当大的提高.下面我将针对分析函数做一些具体的说明.今天我主要给大家介绍一下以下几个函数的使用方法1. 自动汇总函数rollup,cube,2. rank 函数, rank,dense_rank,row_number3. lag,lead函数4. sum,avg,的移动增加,移动平均数5.
查看某个进程使用到的并行进程数
查看某个进程使用到的并行进程数[@more@]查看某个进程使用到的并行进程数select a.QCSID ,count(a.SID)from gv$px_session a where a.SID<>a.QCSIDgroup by a.QCSID
查看临时表空间使用情况
查看临时表空间使用情况[@more@]表空间使用情况:select a.tablespace_name ,a.total_G ,b.fee_G ,(a.total_G-b.fee_G)/a.total_G as "used%" from (select a.tablespace_name ,sum(a.bytes)/1024/1024/1024 As total_G from dba_data_files agroup by a.tablespace_name) aleft join (select a.tablespace_name ,sum(a.bytes)/1024/1024/1024 as fee_G from dba_free_space a group by a.tablespace_name ) b on a.tablespace_name =
SQLLOAD应用举例
SQLLOAD应用举例[@more@]sqlload_ctl.sh文件内容如下:. ${HOME}/.biconfigTABNAME=tb_individual_billINTCODE=05111#!/bin/shsql_clean() {sqlplus -s ${loghwods}<<EOFset echo off;set heading off;set verify off;set feedback off;set show off;set trim off;set pages 0;set concat on;set lines 300;set trimspool on;set trimout on;whenever sqlerror exit 20;truncate table ${TABNAME};exit 0;EOF}infile_list() {unset FLISTexport FLIST=`find $FDIR -name "*${NOW}*.AVL"`bb=`echo $FLIST|wc -w |awk '{prin
在sqlplus全部输出clob字段的内容
在sqlplus全部输出clob字段的内容[@more@]在sqlplus全部输出clob字段的内容创建表create table tp_clob( test clob;);使用工具pl/sql developer中写入如下内容create or replace function fn_test(v_table in varchar)return numberasv_count number;v_sql varchar2(100);begin v_sql:= 'select count(*) from '||v_table; execute immediate v_sql into v_count; return v_count;end;默认的设置在sqlplus中查询的时候只能输出部分内容:SQL>select test from tp_clob;create or replace function fn_test(v_table in va
创建DG过程
创建DG过程[@more@]以下是创建DG的简化过程1.主备节点上都设置为事物日记记录模式.主库:alter database force logging;2.shutdown主数据库,将数据文件(*.dbf)、日记文件(*.log)、控制文件(*.ctl)tar打包.主库:tar -cvf oradata.tar oradata生成文件oradata.tar3.创建standby控制文件主库:alter database create standby controlfile as '/opt/oracle/stdcotrl.ctl';生成文件stdcotrl.ctl4.主库创建pfile主库:SQL> create pfile from spfile; 生成文件initprimary.ora5.登陆备用节点,ftp获得数据库文件、备用控制文件及参数文件ftp>
单引号在动态SQL中的处理
单引号在动态SQL中的处理[@more@]单引号在动态SQL中的处理SQL代码如下:insert into tmpselect * from v_table where organize_id like 'A%' or organize_id = '99999'动态SQL如下: execute immediate 'insert into tmp' ||' select * from ' ||v_table ||' where organize_id like ''A%''' ||' or organize_id = ''99999''';也就是说普通SQL的一个单引号在动态SQL使用两个单引号表示.
绑定变量的一个例子
绑定变量的一个例子[@more@]在ORACLE中,使用绑定变量,可以降低硬解析,通常可以提高系统的性能.如下是一个绑定变量的例子(在存储过程中使用):create or replace procedure pro_update_his_data_mon(v_table in varchar)asv_sql varchar2(500);v_sum_filed varchar2(500);v_sum_mid varchar2(100);v_like varchar2(10):='A2%';v_99999 varchar2(10):='99999';v_zero varchar2(10):='0';v_table_exist number;v_table_exist_bak number;cursor fet_filed is select column_name from user_tab_columns awhere a.table_name = upper(v_table)a
pipelined函数实例
PIPELINED函数实例[@more@]最近用户提供一份如下格式数据的EXCEL地市公司 学校名称 学生数AA公司 巴马一小 0AA公司 NULL 0AA公司 NULL 0AA公司 NULL 0AA公司 NULL 0AA公司 NULL 500BB公司 巴马二小 0BB公司 NULL 0BB公司 NULL 0BB公司 NULL 0BB公司 NULL 0BB公司 NULL 255. . .. . .. . .最后需要实现的效果如下:地市公司 学校名称 学生数AA公司 巴马一小 0AA公司 巴马一小 0AA公司 巴马一小 0AA公司 巴马一小 0AA公司 巴马一小 0AA公司 巴马一小 500BB公司 巴马二小 0BB公司 巴马二小 0BB公司 巴马二小 0BB公司 巴马二小 0BB公司 巴马二