随笔分类 - Oracle 相关
摘要:数据库版本 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit 测试代码 declare p_cur sys_refcursor; v_ename varchar2(50); procedure pro_1(p_cur out sys_refcurso...
阅读全文
摘要:关于DML Error Logging效率的问题,摘自网上一篇文章,作为单独一篇说明,原文如下: DML Error Logging in Oracle 10g Database Release 2 In some situations the most obvious solution to a problem is a DML statement (INSERT ... SELECT,UPD...
阅读全文
摘要:Oracle dml操作过程中可能出现键重复或者数据类型不一致等问题,一般进行数据处理时候需要对这些可能出现的错误提前考虑,避免更新失败。Oralce给出了一些其他解决方案,以在不同场景下使用。 1、ignore_row_on_dupkey_index HINT Oracle 11.2.0.1 版本
阅读全文
摘要:网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘。 wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000。随着版本的变更返回值类型可能会有改动,项目中使用时候最好在新的用户下创建一个函数。 使用方法: s
阅读全文
摘要:Oracle ORA-07445 evaopn2()+128错误问题 问题描述 Plsql developer执行一段sql报错: 经查alert log详细报错信息为: ORA-07445: exception encountered: core dump [evaopn2()+128] [SIGSEGV] [Address not mapped to object] [0x...
阅读全文
摘要:需求 Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。 本文档主要实现前两步需求,发送邮件程序这里不再说明。 原码 授权 begin dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission','>','read,write,execute,delete'...
阅读全文
摘要:ORACLE RETURNING 用法总结 场景 在存储过程、PL/SQL块里需要返回INSERT、DELETE、UPDATE、MERGE等DML语句执行后的信息时使用,合理使用returning能够简化程序逻辑、提高程序性能。 概述 创建测试表 create table hh_emp_test as select * from scott.emp; 使用returning语句 dec...
阅读全文
摘要:利用函数返回结果集方法总结 返回结果集函数可以将变量值传递给函数得到指定的结果集,优点在于灵活控制结果集变量及输出,不用将sql嵌入到页面代码里,业务逻辑如有更改可以直接在数据库中维护。 现总结三种方法:OBJECT TYPE、OBJECT TYPE+PIPE ROW、RECORD+PIPE ROW OBJECT TYPE TYPE定义 create type tp_obj_emp as ...
阅读全文
摘要:oracle导出excel(非csv)的方法有两种,1、使用sqlplus spool,2、使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件:sql脚本文件和格式设置文件。 sql脚本,get_tables.sql 然后在sqlplus下运行
阅读全文
摘要:Oracle连接odbc数据源 oracle连接ODBC数据源有两种方式,hsodbc和dg4odbc,简单说dg4odbc是hsodbc的升级。两种连接方法大致一样,现将连接步骤说明如下: 方法如下: 在Oracle服务器上,cmd窗口中执行命令(dg4odbc或hsodbc) ODBC数据源必须
阅读全文
摘要:1、use_concat 网上说法: CONCATENATION和UNION/UNION ALL操作比较类似,根据OR查询条件,将一个查询分解为两个或更多的部分,然后在去掉两个部分重复的记录。由于CONCATENATION执行计划需要去掉重复的记录,因此和UNION ALL不同。和UNION也不同的
阅读全文
摘要:工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比。 单行拆分 如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如: select regexp_substr('444.555.666', '[^.]+', 1, level) col from dual ...
阅读全文
摘要:一、前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。有人持不同观点,就是强烈建议不要定期重建索引。索引重建是一个争论不休被不断热烈讨论的议题。 1、重建索引的理由 a、Oracle的B树索引随着时间的推移变得不平衡(误解) b、索引碎片在不断增加 c、索引不断增加,删除的空间没有重复使用 d、索引 c...
阅读全文
摘要:Oracle策略可以限制查询、修改、删除、新增等操作,刚接触,对查询做一个测试:参照http://blog.csdn.net/diyyong/article/details/19552637用法如下:begin -- Call the procedure sys.dbms_rls.add_pol...
阅读全文
摘要:partition outer join实现将稀疏数据转为稠密数据,举例:with t as (select deptno, job, sum(sal) sum_sal from emp group by deptno, job),tt as (select distinct job from t)...
阅读全文
摘要:《基于Oracle的sql优化》里关于哈希连接的原理介绍如下: 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法。 在Oracle 7.3之前,Oracle数据库中的常用表连接方法就只有排序合并连接和嵌套循环连接这两种,但这两种表连接方法都有其明显缺陷。对于排序合并连接,如果两个表在施加了目标SQL中指定的谓词条件(如果有的话)后得到的结果集...
阅读全文
摘要:当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 deadlock detected while waiting for resourceoracl...
阅读全文
摘要:对于数据量较大的插入操作可采用此种方法操作,注意: limit减少内存占用,如果数据量较大一次性全部加载到内存中,对PGA来说压力太大,可采用limit的方法一次加载一定数量的数据,建议值通常为1000。使用limit时注意,循环的时候如果用while cursor_name%found loop,对于最后一次fetch的数据量不足设定值1000,%found条件就会不成立。示例使用v_o...
阅读全文
摘要:回表 简单来说就是数据库根据索引找到了指定的记录所在行后,还需要根据rowid再次到数据块里取数据的操作。 "回表"一般就是指执行计划里显示的"TABLE ACCESS BY INDEX ROWID"。 例如select的字段里有索引不包含的列 根据tom的oracle编程艺术,建表big_table,300W数据。 建索引: create index idx_big_table_cre...
阅读全文