Oracle中巧用bulk collect实现cursor批量fetch
在一般的情况下,使用批量fetch的几率并不是很多,但是Oracle提供了这个功能我们最好能熟悉一下,说不定什么时候会用上它。[@more@]declarecursor c1 is select * from t_depart;v_depart t_depart%rowtype ;type v_code_type is table of t_depart.depart_code%type ;v_code v_code_type ;type v_name_type is table of t_depart.depart_name%type ;v_name v_name_type ;beginopen c1;fetch c1 bulk collect into v_code , v_name ;for i in 1..v_code.count loopdbms_output.put_line(v_code(i)||' '||v_name(i));end loop; close c1; e
用DBMS_JOB来实现高级计划任务
程序有三个参数:需要提交的任务的名字、启动任务的时间已经执行该任务的间隔时间。[@more@]dbms_job.submit(what='statspack_alert.sql;', next_date=sysdate+1/24, -- 在下一个小时后启动 interval='sysdate+1/24'); -- 每小时运行一次 问题是,尽管我们在这个程序中指定了任务起始时间和重新执行的时间间隔,但是我们看不到在预定时间运行该任务的机制。例如,如何让一个任务在早上8点启动、每小时 运行一次、最后在下午5点终止呢? 上面的例子让该任务每小时运行一次,但是为了获得时间间隔,它有必要创建两个其它任务:一个任务在下午
oracle 触发器 和 常用内置程序包
-触发器和常用内置程序包--author:shine--一.触发器:--1.触发器组成:由触发器语句,触发器限制,触发器操作三部分组成。[@more@]--exp:1.1.1create or replace trigger tri_test1before update or inserton empfor each row --以上是触发器语句(即:什么时机触发)when (new.sal > 5000) --触发器限制(即:满足什么条件时执行触发器操作,注意:只能一个触发器只能有一个限制)begin --以下是触发器操作(即:满足触发器限制时执行什么操作) dbms_output.put_line('会不会多啦点'); :new.sal := 2000;end; --测试update emp set
oracle 快速删除和快速插入的方法之一
快速插入[@more@]SQL> insert /**//*+append*/ into t select * from dba_objects nologging;9157 rows created.SQL> select a.xidusn,a.xidslot,a.used_ublk,a.used_urec,b.username 2 from v$transaction a,v$session b,v$mystat c 3 where a.addr = b.taddr and c.statistic# = 1 4 / XIDUSN XIDSLOT USED_UBLK USED_UREC USERNAME---------- ---------- ---------- ---------- ------------------------------ 2 21 1 1 CUSTSQL> commit;Commit complete.SQL> insert in
SQLServer和Oracle常用函数对比
某种意义上也可以说是 sqlserver 和 mysql 的常用函数对比。数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual [@more@] 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:
一个ORACLE导入和导出XML文件的例子
详细请查看......[@more@]导入:/*****************************************************************************过程名称:add_to_stockmarket参数1:fileName in varchar2 接收用户输入的xml文件名功能:将xml文件中的数据导入到Stockmarket数据表中*****************************************************************************/create or replace procedure add_to_stockmarket(fileName IN varchar2) asdocument xmldom.DOMDocument;--声明文档对象模型subelement xmldom.DOMElement;--声明元素类型nodelistStock xmldom.DOMNod
查找bad sql
一些查找bad sql的方法:[@more@]column sql_text format a80;-- 值得怀疑的SQL 来自http://www.ixora.com.au/selectsubstr(to_char(s.pct, '99.00'), 2) || '%' load,s.executions executes,p.sql_textfrom( selectaddress,disk_reads,executions,pct,rank() over (order by disk_reads desc) rankingfrom(selectaddress,disk_reads,executions,100 * ratio_to_report(disk_reads) over () pctfromsys.v_$sqlwherecommand_type != 47)wheredisk_reads > 50 * executions) s,sys.v_$sqltext pwheres.ranking <= 5 andp.address = s.a
ORACLE索引与高性能SQL介绍
什么是索引 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;[@more@] Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引; 索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。 使用索引的目的 加快查询速度 减少I/O操作 消除磁盘排序 何时使用索引 查询返回的记录数 排序表<40% 非排序表 <7% 表的碎片较多(频繁增加、删除) 索引的种类
10046 Event漫步
我们知道,Oracle提供了Internal Events以便Oracle Support人员利用其对Oracle的内部行为进行一些更为深入细致的记录与跟踪,从而分析查找并解决Oracle用户所遇到的棘手问题。[@more@]对于大部分的Internal Events,Oracle是没有官方文档加以阐述的,不过,这些Events中有几个是被公认为非常重要并被广泛研究和采用的。这其中,最重要的就是在进行Sql Tuning时常利用的10046 event。如果你对oracle性能调优很感兴趣或者比较专长,那么你对oracle的10046事件一定不会陌生。10046 event是对oracle进行系统性能分析时一个最重要的手段。当激活
数据库查询中的连接
在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。连接的全部意义在于在水平方向上合并两个数据集合(通常是表)。下面是几种常用的连接类型:[@more@]连接类型定义图示例子内连接只连接匹配的行select A.c1,B.c2 from A join B on A.c3 = B.c3;左外连接包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行select A.c1,B.c2 from A left join B on A.c3 = B.c3;右外连接包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行select A.c1,B.c2 from A r
Oracle数据类型
在ORACLE8中定义了:标量(Scalar)、复合(COMPOSITE)、引用(REFERENCE)和LOB四种数据类型,[@more@]标量(Scalar) 标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。 它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。 数字, 它有三种基本类型:NUMBER、PLS_INTEGER和BINARY_INTENER。 NUMBER可以描述整数或实数,而PLS_INTEGER和BINARY_INTENER只能描述整数。 NUMBER,是以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它 转换成为二进制进行运算的。它的定义方式是NUMBER(P,S),P是精度,最大38
pl/sql 异常处理的概念和术语
pl/sql 提供了强大而灵活的手段来捕捉和处理程序产生的异常,从而使 oracle 的用户远离一些令人烦恼的 bug 。[@more@] pl/sql 异常处理的概念和术语 在 oracle 中所有的错误都被认为是不应该发生的异常。一个异常可能是以下 3 种情况的一种: u 由系统产生的错误(“ out of memory ”或“ duplicate value in index ”) u 用户行为导致的错误 u 应用程序给用户的一个警告 pl/sql 用一种异常句柄的结构来捕捉和响应错误。正是有了异常句柄的存在,我们能很方便的分离异常处理代码与可执
PL/SQL复合数据类型
PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。在本文中我们将讨论记录和集合的类型、怎样定义和使用记录和集合以及使用正确的循环控制。[@more@][Ref: http://www.yesky.com/20020819/1625866.shtml ]PL/SQL 记录 记录是PL/SQL的一种复合数据结构,scalar数据类型和其他数据类型只是简单的在包一级进行预定义,但复合数据类型在使用前必须被定义,记录之所以被称为复合数据类型是因为他由域这种由数据元素的逻辑组所组成。域可以是scalar数据类型或其他记录类型,它与c语言中的结构相似,记录也可
RESTRICT_REFERENCES的意思
RESTRICT_REFERENCES,这个PRAGMA比较复杂,从字面上也看不到什么。[@more@] 总的来说,它是一个程序辅助检验码,检查子程序的纯度(PURITY),帮助检验子程序是否有违反规则的地方。一般用在函数上,但当函数调用过程时,也要作相应的设置检查。这是为了避免当在DML语句上调用函数时正常执行不至于产生错误。 语法,PRAGMA RESTRICT_REFERENCES(function_name | default , )RNDS, WNDS, RNPS, WNPS) | , TRUST); RNDS,WNDS,RNPS,WNPS可以同时指定。但当TRUST指定是,其它的被忽略。 DEFAUT是指作用在该程序包上的所有子
oracle同时向多表插入数据
阅读提示:本文简单给出了在oracle中使用All、First语句实现向多表插入数据的操作,供大家参考![@more@]在Oracle操作过程中经常会遇到同时向多个不同的表插入数据,此时用该语句就非常合适。All表示非短路运算,即满足了第一个条件也得向下执行查看是否满足其它条件,而First是短路运算找到合适条件就不向下进行。INSERT ALLWHEN prod_category=’B’ THENINTO book_sales(prod_id,cust_id,qty_sold,amt_sold)VALUES(product_id,customer_id,sale_qty,sale_price)WHEN prod_category=’V’ THENINTO video_sales(prod_id,cust_id,qty_sol
Oracle 10g的闪回查询概述
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表 [@more@]以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 — 当然是意外地删除 — 并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!) Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时
9i新特性之Flashback Query的应用---针对DML误操作的恢复
在9i之前,如果出现DML的误操作,只能通过备份来完成基于时间点的恢复,9i给提供了一个新的特性Flashback Query,我们可以应用此特性,可以很方便的实现恢复。但是要注意的是,Flashback Query 仅仅是一个查询的机制,不会真正的UNDO任何数据。[@more@]1. 什么是Flashback Query?利用Oracle 多版本读一致的特性通过undo 来提供所需的前镜像中的数据。通过这个功能,可以看到历史数据,甚至用历史数据来修复误操作引起的错误。可以通过指定时间或者SCN 来检索需要的数据。{Uses Oracle's multiversion read-consistency capabilities to
获取汉字串的拼音助记码
CREATE OR REPLACE FUNCTION FUN_SPELLCODE(PRM_SPELL IN VARCHAR2) RETURN VARCHAR2[@more@] /*-------------------------------------------------------------------------- || 业务环节 : 公共类_获取汉字串的拼音助记码 || 函数名称 fun_SpellCode || 功能描述 :拼音码转换函数,根据传入字符串,产生不超过20为的拼音助记码 || 使用场合 : || 参数描述 :标识 名称 输入输出 数据类型 || --------------------------------------------------------------- ||
NOCOPY
pl/sql中对out,in out参数使用的?[@more@]默认形参会复制一份实参的副本,然后在内部传递,修改等,发生异常,不会赋值给实参,控制权交还调用环境,而实参值不变,还是调用前的值。而使用了nocopy后,形参将获得一个指向实参的指针,然后在内部传递,赋值都直接修改实参了,此时如果异常发生,控制权交还调用环境,但是实参已经被修改了。无法还原成调用前的值。 对参数I N使用nocopy将会产生编译错误,这是因为参数I N总是按引用传递.NOCOPY的主要优点是可以提高程序的效率。当我们传递大型pl/sql表时,其优越性特别显著.使用NOCOPY的
Oracle9i的简化SQL语法
Oracle对Oracle9i SQL 做了一些很重要的改进,包括一些令人兴奋的新特点,支持1:5的数量级和ISO99中的SQL标准。作为Oracle的补充,它包括以下新的TABLE JOIN的句法结构:[@more@]CROSS IN——它在两个表格中创建了一个卡迪尔列,就象是在Oracle8i中没写WHERE时那样。NATURAL JOIN——这是一个很有用的Oracle9i的句法,它通过从WHERE子句中移动连接标准来改善SQL的稳定性 USING子句——它可以通过名字来具体指定连接 ON子句——这个句法允许在两个表格中为连接具体指定栏目的名头 LEFT OUTER JOIN——它返回表格中左边的行和右边的数值,