![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ORA-Dev
文章平均质量分 57
duqiangatom
这个作者很懒,什么都没留下…
展开
-
SYS_CONNECT_BY_PATH
将有层次关系的树状图,从root开始遍历每个节点到leaf,每条分支为一条记录。如 SELECT 1 x FROM DUAL UNION ALL SELECT 0 x FROM DUAL (显示为2条记录 0 ,1) SELECT /*REPLACE*/(SYS_CONNECT_BY_PATH(x,','))/*,',') s*/ FROM (SELECT 1原创 2012-12-17 19:46:56 · 215 阅读 · 0 评论 -
7种判断大表是否有数据办法效率比较
1、准备大表large_tablecreate table large_table as select * from SYS.SOURCE$;insert into large_table select * from SYS.SOURCE$;analyze table large_table compute statistics;select num_rows, tab原创 2012-12-17 19:45:00 · 362 阅读 · 0 评论 -
表函数入门
1、使用场合: 任何返回集合(仅嵌套表和数组,索引表不支持)的函数都可以使用TABLE()操作符通过标准的SQL来查询。这样的函数被称为表函数。2、使用示例: a、nested table create or replace type t_tab is table of NUMBER; -不允许index table(数组和嵌套表都可以直接创建类型原创 2012-12-17 19:44:51 · 250 阅读 · 0 评论 -
一句sql实现本月日历 & 本年日历
1、一句sql实现本月日历 select max(su) su,max(mo) mo,max(tu) tu,max(we) we,max(th) th,max(fr) fr,max(sa) sa from(select case when d=1 then dd end su, case when d=2 then dd end mo, case wh原创 2012-12-17 19:44:39 · 889 阅读 · 0 评论 -
oracle树形父子关系递归检索
1、初始化数据id parent_id 1 2 1 3 1 4 2 5 2 6 4 7 4 8 9 8create table connect_table (ID int, PARENT_ID int);insert into connect_t原创 2012-12-17 19:44:32 · 508 阅读 · 0 评论 -
package中全局变量特性
Oracle中的package对象是其他数据库中所不存在的特性之一,这是oracle面向对象编程的一种体现.我们可以像定义面向对象语言的对象一样定义oracle的package. 并为package定义对应的属性(全局变量)全局变量(可以定义在包头,也可以在包体,赋值一定在包体)和方法(function,procedure). package的全局变量在oracle编程过程中有原创 2012-12-17 19:44:15 · 1162 阅读 · 0 评论 -
Wrap加密存储过程和包体
E:\>wrap iname=a.sql oname =destination.plbPL/SQL Wrapper: Release 10.2.0.1.0- Production on 星期四 6月 24 21:57:47 2010Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing a.sql to de原创 2012-12-17 19:44:05 · 356 阅读 · 0 评论 -
自治事务
1、环境准备SQL> create table test_a(id number);CREATE OR REPLACE PROCEDURE p_autonomous_transactionASPRAGMA AUTONOMOUS_TRANSACTION;BEGIN INSERT INTO Test_a VALUES(1); COMMIT;END;/2、演示(适原创 2012-12-17 19:43:51 · 532 阅读 · 0 评论 -
分步骤删除大表数据(转自eygle)
create or replace procedure deleteTab( p_TableName in varchar2, -- The TableName which yo原创 2012-12-17 19:43:33 · 207 阅读 · 0 评论 -
游标加锁更新数据
1、加锁会锁住游标中的所有数据行,而不是只锁定取出的数据行 DECLARE CURSOR c1 IS SELECT empno, job, sal FROM emp FOR UPDATE; ...BEGIN OPEN c1; LOOP FETCH c1 INTO ... ..原创 2012-12-22 21:42:47 · 884 阅读 · 0 评论 -
oracle_datapump类型外部表
1、卸载数据(可以并行) create table dp_user_objectsorganization external(type oralce_datapumpdefault directory user_data_dirlocation ('user_objects1.dmp','user_objects2.dmp'))parallel 2as s原创 2012-12-22 21:24:14 · 389 阅读 · 0 评论 -
sql和PL/SQL中绑定变量的区别
在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些原创 2012-12-22 21:23:29 · 461 阅读 · 0 评论 -
Merge
一、merge相关1、一些复杂的关联update更新数据,可以考虑用merge代替2、on中可以实现被插入表的单表数据过滤(using 数据源可以为空,此时when matched 和when not matched 返回null都不执行) 如 merge into test d using (select 1 from dual)s原创 2012-12-22 21:19:59 · 285 阅读 · 0 评论 -
sqlplus输出html或者excel格式报表
1、excel set linesize 100 set term off verify off feedback off pagesize 0set markup html on entmap ON spool on preformat offspool d:\test.xls select financial_product_nme from financial_produ原创 2012-12-17 19:45:04 · 427 阅读 · 0 评论 -
通过重建SEQUENCE实现修改序列当前值
select 'drop sequence '||sequence_name ||';create sequence '||sequence_name||'minvalue '||user_sequences.min_value||'maxvalue '||user_sequences.max_value||'start with '||user_sequences.last_nu原创 2012-12-17 19:45:31 · 585 阅读 · 0 评论 -
select list中的子查询与外连接具有相同的功效
场景:在解决表见数据约束性不强的表间连接数据查询时,等值连接(inner join)往往不能满足要求此时,select list中的子查询与外连接具有相同的功效原创 2012-12-17 19:46:06 · 330 阅读 · 0 评论 -
随机数(洗牌)
-- Created on 2010/7/4 by DUQIANG declare -- Local variables here type t_tab is table of number index by pls_integer; v_tab1 t_tab; v_tab2 t_tab; k int :=52; ---随机数个数 v_原创 2012-12-17 19:44:34 · 218 阅读 · 0 评论 -
动态sql与静态sql
1、定义区别: Oracle编译PL/SQL程序块分为两个种:其一为预编译(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是运行时编译(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能在用户输入一定的查询条件后提交给原创 2012-12-17 19:44:28 · 410 阅读 · 0 评论 -
分析函数之窗口函数
当统计量随着当前记录变化时,就需要用到窗口函数了特殊情况: select sum (c1) over() from 加的所有的和; select sum(c1) over(order by c2) from 与 over ( ORDER BY site_id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOU原创 2012-12-17 19:44:26 · 239 阅读 · 0 评论 -
exists,in 和 not in ,not exists
一、in 和 exists区别 in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),原创 2012-12-17 19:44:22 · 227 阅读 · 0 评论 -
FORALL(INDICES AND VALUES)
批量绑定是oracle9i新增加特性,是指执行单次SQL操作能传递所有集合元素的数据,通过批量绑定可以极大的加快数据处理速度,提高应用程序的性能,批量绑定是使用bulk collect子句和forall语法完成,其他bulk collect子句用于取得批量数据,该子句只能用于select语句、fetch语句和DML返回子句,而forall语句只适用于批发批量的DML操作。forall语句原创 2012-12-17 19:44:13 · 482 阅读 · 0 评论 -
消息队列入门
1、创建消息队列中存储信息的结构体 create or replace type t_event_queue as object (owner varchar2(50),name varchar2(50));2、创建消息队列表,引用信息结构体 exec dbms_aqadm.create_queue_table(queue_table => 'event_queue_ta原创 2012-12-17 19:43:20 · 275 阅读 · 0 评论 -
使用游标打印报表3种方法
1、游标常量declare v_sname varchar(10); v_sno varch:ar(10); cursor c_students IS select sno, sname from students order by 1;begin open c_students; loop fetch c_students原创 2012-12-17 19:42:56 · 1266 阅读 · 0 评论 -
SET TRANSACTION READ ONLY 只读事务
如果把事务设置成READ ONLY,后续查询就能看到事务开始之前提交的内容;只读事务对于运行那些涉及到一个或多个数据表的多查询来说,是很有用的;并且,在其他用户对表进行更新操作的时候,我们也可以对同样的表进行查询操作。在只读事务中,所有的查询都会引用同一个提供多表,多查询,读一致视图的数据库快照。其他用户可以像平时一样继续查询或更新数据。在下面的例子中,作为一个商店经理,我们可以使用一个只原创 2012-12-22 21:44:07 · 2253 阅读 · 0 评论 -
Trigger example
1、一个例子 表test1(id1 int,name varchar2(200); 表log(trigger_info) create or replace trigger audit_test1 after insert or update of name or delete on test1 --只有update能到列 fo原创 2012-12-22 21:22:00 · 283 阅读 · 0 评论 -
十进制转二进制(2转10 bin_to_num)
select ltrim(replace(replace(replace(replace(replace(replace(replace(replace(replace( replace(replace(replace(replace(replace(replace(replace(to_char(?,'FMXX') ,'0','0000'),'1','0001')原创 2012-12-17 19:46:43 · 949 阅读 · 0 评论 -
采用sqlldr定时将文本文件加载进入数据库
需求:每个小时前台生成一个追踪文件,文件名格式为yyyymmddhh,存放在linux服务器上,要求每小时将上一个小时生成的文件导入数据库解决方案:采用sqlldr可以快速的将外部文本文件加载到数据库中,根据要求创建控制文件和shell脚本,其中控制文件如下[root@justin justin]# more control.ctlload datacharacterset U原创 2012-12-17 19:46:41 · 295 阅读 · 0 评论 -
在外键末加索引的情况下,可能带来的问题
问题: 1、在父表上做dml可能引起子表的表级锁(更新父表主键列或者删除子表一行,子表整个表会锁住)2、如果有DELETE CASCADE,而且子表外键列未加索引,那么删除父表的每一行,都会对子表做一次全表扫描。如果删除的是多行,则有多少行就得全表扫描多少次。3、父表和子表链接查询时,速度可能很慢。例外(也可以不加索引):1、在父表不删除行或者不改主键列2、没有从主表联接子原创 2012-12-17 19:46:33 · 401 阅读 · 0 评论 -
将文件存为blob或者bfile字段
create user test identified by test default tablespace tbs_ls_data temporary tablespace temp;GRANT DBA TO TEST;grant create any directory to test;grant create any library to test;create table原创 2012-12-17 19:46:35 · 467 阅读 · 0 评论 -
行级触发器相关的变异表
1、变异表定义: 变异表就是当前正被DML语句更新的表;(一些行修改一些行未修改时读取表而导致的变异表问题)2、环境准备: 为了更好的阐述变异表考虑下面3个表:students,classes,registered_students 表students和classes都没有依赖关系但是表registered_students有两个外键一个依赖于stud原创 2012-12-17 19:44:56 · 479 阅读 · 0 评论 -
nested table 与 index table区别
1、数组下标类型不一样,前者只能用数字,后者还可以用字符2、前者可以作为一个表的字段类型,后者不行3、前者用之前需要初始化,extend,后者不用。原创 2012-12-17 19:44:17 · 440 阅读 · 0 评论 -
oracle日期格式杂烩
注意(关于IW计算周数):1、如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;2、如果在不足52周别的话,则以下一年的时间来补;3、每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;1、关于to_char格式'W','WW','IW' a 、SELECT TO_CHAR(原创 2012-12-24 18:39:15 · 394 阅读 · 0 评论 -
行列变换、PL/SQL游标加锁
A、行列变化 1、建立测试数据:SQL> create table t(name varchar2(10),type number,phone number);SQL> insert into t values('duqiang',1,09176...22); SQL> insert into t values('duqiang',2,0106....22);S原创 2012-12-24 18:26:54 · 354 阅读 · 0 评论 -
绑定变量(bind variables)、替换变量(substitution variables)
1、替换变量(主要用来 sql、plsql与用户的交互,可以运行时输入、也可提前输入) 注意:只替换变量,如果是字符,请放在单引号内,如‘&1’; a 、使用环境 sql语句中:如 select * from site where site_no='&1'; pl/sql块中使用,如: DEC原创 2012-12-24 18:57:31 · 1265 阅读 · 0 评论 -
FORALL
DECLARE TYPE char_rec IS TABLE OF VARCHAR2(5) INDEX BY PLS_INTEGER; TYPE pls_rec IS TABLE OF NUMBER INDEX BY PLS_INTEGER; siteno_rec char_rec; pct_rec pls_rec;BEGIN FOR i IN 1 .. 20 L原创 2012-12-24 18:35:24 · 391 阅读 · 0 评论 -
level、connect by、rownum使用
--1、start with + connect by -->一般用于构成树查询--eg:SELECT * FROM district WHERE del_flag = 0 AND (district_level_code IN (SELECT DISTINCT domain_key FROM domain_district_level) OR district_level_原创 2012-12-24 18:28:07 · 684 阅读 · 0 评论 -
避免selet into的no_data_found
declarev_rdc_id number;beginselect nvl(sum(rdc_id),0) into v_rdc_id from rdc t where 1=2; ---- 先聚合,再取nvl后。即使中间返回0条记录,也不会no_data_foundend;原创 2012-12-24 18:16:02 · 280 阅读 · 0 评论 -
定语复合分区表的2种语法
1、在每个分区中嵌套子分区:create table ptest(id int ,name varchar2(30),gender varchar2(1))partition by range(id)subpartition by list(gender)(partition p1 values less than(10)(subpartition p1_1 values原创 2012-12-24 18:37:40 · 384 阅读 · 0 评论 -
2种Global临时表
1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被原创 2012-12-24 18:34:24 · 543 阅读 · 0 评论 -
游标常量+游标变量的使用
游标打开的瞬间(尤其是游标定义中含有变量时,只使用打开时的值),已经决定了游标的内容!!!fetch 取不到值时,不异常,只是使notfound值为false而已。游标变量如果有类型返回要求(return)时,不允许使用动态sql。因为它要验证类型。1、游标常量: declare cursor v_cur(v_name varchar2 default 'c原创 2012-12-24 18:18:17 · 656 阅读 · 0 评论