动态删除,创建索引
在大批量数据insert的时候,往往要先删除索引,在数据insert好了以后在重新创建索引,所以写了一下过程,用于自动调用[@more@]create table TEMP_INDEX(INDEX_SRC CLOB,FLAG NUMBER(1));CREATE OR REPLACE PROCEDURE P_ALTER_INDEX(AN_O_RET_CODE OUT NUMBER,AC_O_RET_MSG OUT VARCHAR2,AC_I_TABLE_NAME IN VARCHAR2,AC_I_FLAG IN NUMBER,AC_I_USER IN VARCHAR2) IS/******************************************************************输入参数:AC_I_TABLE_NAME 需要删除索引的表,默认全部AC_I_FLAG 为 0 时删除,为 1 时创建输出参数
记一个低级又严重的错误
今天在做两表关联update的时候,发现产生的日志量远远超出想象,update的sql如下:update t1 set t1.name=(select t2.name from t2 where t1.id=t2.id)其中t2只有几条数据。按我以前的观点,只更新t1表中id在t2存在的记录,但测试结果让我大吃一惊:[@more@]oracle9i> select count(1) from item where item_name is null;COUNT(1)----------0oracle9i> update item set item_name=(select item_name from t where t.item_id=item.item_id);已更新151612行。oracle9i> select count(1) from item where item_name is null;COUNT(
update操作会产生几条日志?
我们知道,在快速刷新物化视图中,源表必须建立物化视图日志来记录源表数据的变化,从而使得物化视图能够快速刷新。今天以前一位同事提出这样一个问题:做一个update操作会产生两个mlog$日志。这与我印象中产生一条记录不同。下面重现这个过程:[@more@]首先建立测试数据表:SQL> create table k(id int primary key,name varchar2(10));Table createdSQL> create materialized view log on k;Materialized view log createdSQL> insert into k values(1,'suk');1 row insertedSQL> commit;Commit completeSQL> create mate
介绍histograms
histograms一般被我们翻译成为直方图,实际上当我们统计了histograms信息之后,user_tab_histograms里面的信息确实可以以直方图的方式展示给我们。而这些信息描述的就是我们的表的信息的分布情况。我们这一节将会主要介绍什么是直方图以及Oracle使用直方图的一些细节。和以前一样,我们的讨论还是从一个实验开始:[@more@]1)什么是histograms首先还是创建测试表:execute dbms_random.seed(0)create table t1 aswith kilo_row as (select /*+ materialize */rownum from all_objectswhere rownum <= 1000)select trunc(7000 * dbms_ra
ORACLE 8i,9i 表连接方法。
一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接。[@more@]对于外连接: Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN LEFT OUTER JOIN:左外关联 SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id); 等价于 SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id(+) 结果为:所有员工及对应部门的记录,
ORACLE存储过程中返回数据集
首先建立一个包CREATE OR REPLACE PACKAGE GLOBALPKGASTYPE RCT1 IS REF CURSOR;TRANCOUNT INTEGER := 0;IDENTITY INTEGER;END;[@more@]然后建立存储过程CREATE OR REPLACE PROCEDURE GetColumnList(TableName IN VARCHAR2 DEFAULT NULL,cur_OUT OUT GLOBALPKG.RCT1)ASBEGIN/*——–获取表信息———*/OPEN cur_OUT FORSelect IIDD as 编号, SortID as 排序, ColumnName as 列名 , ColumnName_Dis as 显示列名,IsDisplay_Grid as 浏览显示, IsEditVisible as 编辑显示,ColumnType as 字段类型,ColumnLength as 长度 , DisplaySize as 控件
建立函数索引的权限
已经拥有connect,resource 权限,但不能建立函数索引。提示如下:create index ix_test_abc on test_abc(substr(astr,5));ORA-01031: insufficient privileges.通过显式授权,grant query rewrite to username解决。[@more@]
library cache pin和library cache lock
一、概述一个实例中的library cache包括了不同类型对象的描述,如:游标,索引,表,视图,过程,等等.这些对象不能在他们被使用的时候改变,他们在被使用的时候会被一种library locks and pins的机制锁住.一个会话中,需要使用一个对象,会在该对象上先得到一个library lock(null, shared or exclusive模式的)这是为了,防止其他会话也访问这个对象(例如:重编译一个包或视图的时候,会加上exclusive类型的锁)或更改对象的定义.总的来说,library cache pin和library cache lock都是用于share pool的并发控制的。pin和lock都可以看作是一种锁。locks/p
Oracle分析函数参考手册
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。[@more@]下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。除本文内容外,你还可参考:ROLLUP与CUBE http://xsb.itpub.net/post/419/29159分析函数使用例子介绍:http://xsb.itpub.net/post/419/44634本文如果未指明,缺省是在HR用户下运行例子。开窗函数的的理解:开窗函数指定
一个IT人的建议:跳槽一定要谨慎
每年年初跳槽最多,跳槽是一门学问,也是一种策略。跳槽并不意味着你就能够取得职业的成功,当面临跳槽时,如何顺利地完成跳槽,从而取得职业的成功呢?以下是一些切身体会,值得大家参考[@more@]不错,大家逐渐逐渐步入了跳槽的殿堂。这三年,我是跳烦了,如今无所它求,但求稳定。不过,仅凭借我这七次跳槽的经验,说点感受,也希望大家能够越跳越好: (1)不要指望会一下子能够跳到多么好的公司,绝大多数公司都一个样子。比如用友、金蝶、亚信、神马这些公司,其实基本上一个样子。 (2)不要一味的指望进大公司,大公司
FORALL的功能得到丰富,BULK COLLECT使其进一步加强,VALUES OF令其更胜一筹。(转)
在我所撰写的关于Oracle数据库10g中PL/SQL增加功能的第二篇文章中,我将探讨使用带有非连续驱动索引的FORALL语句这一新功能。这初听起来也许相当深奥,但实际上它是对FORALL语句的一个关键性改进,它可大大简化代码,并且对于那些要在PL/SQL程序中更新很多行数据的程序来说,它可显著提高其性能[@more@]我将首先回顾FORALL的功能,然后分析Oracle数据库10g对非连续驱动索引提供支持所产生的影响。用FORALL来增强DML的处理能力Oracle为Oracle8i中的PL/SQL引入了两个新的数据操纵语言(DML)语句:BULK COLLECT和FORALL。这两个语句在PL/SQL
PL/SQL开发中动态SQL的使用方法
转自:http://www.qqread.com/oracle/c225857010.html内容摘要:在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行。这就需要使用动态SQL来实现。[@more@]本文通过几个实例来详细的讲解动态SQL的使用。 本文适宜读者范围:Oracle初级,中级 系统环境: OS:windows 2000 Professional (英文版) Oracle:8.1.7.1.0 正文: 一般的PL/SQL程序设计中,在DML和事务控制的
分区表PARTITION table
分区表PARTITION table,以及把已存在数据的表转为分区表。 1.1 分区表PARTITION table在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。[@more@]1.1.1 分区表的建立: 某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的是该公司1999年的数据(假设每月产生30M的数据),操作如下: 范围分区表:CREATE TABLE sales (invoice_no NUMBER, ... sale_date DATE NOT NULL ) PARTITION BY RANGE (sale_date) (PARTITION sales1999_q1 VALUES LESS THAN (TO_DATE(‘1999-04-01’,’YY
exchange partition
exchange partition提供了快速转换普通成分区表的方法,它通过更新数据字典来实现分区与普通表的置换,所以速度相当快。[@more@]create table t1 as select sysdate dt, all_objects.* from all_objects;create table t2 as select sysdate dt, all_objects.* from all_objects;create table t3 as select add_months(sysdate,-24) dt, all_objects.* from all_objects;create table t( dt, OWNER, OBJECT_NAME, SUBOBJECT_NAME,OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED,LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY,GENERATED,
一次 sqlload问题处理
昨天晚上,测试的发现用sqlload加载数据的时候,会提示 :被拒绝 - 表 OF_07 的列 TA_CODE 出现错误。ORA-00984: 列在此处不允许.[@more@]察看ctl文件:LOAD DATA INFILE 'C:.BCP.0' Append INTO TABLE OF_07 FIELDS TERMINATED BY X"09" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (FUNDNAME,TOTALFUNDVOL,FUNDCODE,FUNDSTATUS,NAV,CURRENCYTYPE,CUSTODIANCODE,IPOSTARTDATE,IPOENDDATE,FUNDMANAGERCODE,REGISTRARCODE,FUNDSIZE FILLER,FUNDSPONSOR,UPDATEDATE FILLER,FACEVALUE,CONVERTSTATUS FILLER,MINREDEMPTIO
sqlplus
1.5 Comments in scriptWhen we add comments in a script file, we should very careful. Comments will lead to unexpected result in some special conditions.[@more@]1.5.1 An English letter follows closely in comment symbol '/*'In SQL*Plus, it will lead the SQL statement before the comment to be executed twice. For example, the script file “test.sql” includes follow SQL statements:select 'aaa' from dual;/*abc*/select 'bbb' from dual;We just want the statement ‘select 'aaa' from dual;’ to be execut
jboss的目录结构
JBoss的目录: bin 启动和关闭JBoss的脚本 client 客户端与JBoss通信所需的的Java库(JARs)[@more@] docs 配置的样本文件(数据库配置等) doc/dtd 在JBoss中使用的各种XML文件的DTD。 lib 一些JAR,JBoss启动时加载,且被所有JBoss配置共享。(不要把你的库放在这里) server 各种JBoss配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。JBoss包含3个默认的配置:minimial,default和all。 server/all