![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Oracle
爱码僧
成长在于点点滴滴。
展开
-
查询执行的基础
一、执行一个查询的过程1、客户端发送一条查询给服务器2、服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段3、服务器端进行sql解析、预处理,再由存储引擎层提供的统计信息并使用服务器层的CBO优化器(mysql并不是任何时候都是哟红基于成本的CBO优化器,有时候也会使用基于规则的RBO优化器)生成对应的执行计划。4、MySQL根据优化器生成的执行计...原创 2020-01-16 22:53:42 · 180 阅读 · 0 评论 -
数据库连接工具 DBUtil.java
方式一:使用相对路径import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Propertiespublic final class DBUtil{ //数据库驱动 private static String driver =""; ...原创 2019-09-02 20:37:34 · 1383 阅读 · 1 评论 -
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
最近对接第三方的数据同步的时候,发现了这样一个问题:业务场景:定时将第三方Oracle数据库中的数据同步到我方mysql数据库中,使用最原始的JDBC连接Oracle数据库,将对方提供的视图数据同步过来!在联调的时候发现无论如何都无法连接到对方的Oracle数据库,现场的同事使用PL/SQL developer 使用相同的连接参数却可以正常连接,报错信息如下:java.sql.SQLEx...原创 2019-09-02 19:35:03 · 2967 阅读 · 0 评论 -
SQL调优思路
首先说一下Oracle的优化器:RBO:基于规则(rule)的优化器;Oracle9i及之前使用,对SQL语句的语法规则要求较高,调优必然是从语法规则开始;例如驱动表要放到from关键字的最后面,尽量使用exists 、not exists 代替 in、not in 等等。CBO:基于代价(cost)的优化器;Oracle9i之后使用也是Oracle主推的优化器,更加智能,对语法规则不敏...原创 2019-05-19 19:08:27 · 718 阅读 · 0 评论 -
当发现Oracle的Order by严重的影响了SQL性能,我们该怎么办?
原因分析:由于内存区域不够,Oracle 使用磁盘的内存空间进行排序操作,这样就导致了I/O影响SQL性能解决方式:1.在排序字段上加索引,但是这个对性能的提升不明显,因为排序是在返回的结果集中完成。2.可以尝试配置PGA,使其进行自动管理这块内存区域,让Oracle的排序在内存中完成。不用重启DB,直接在线修改。SQL>alter system set workar...原创 2019-03-17 15:26:11 · 5298 阅读 · 0 评论 -
记一次使用自治事务的坑
踩过的坑,分享出来,希望大家不要再去踩了报错信息: 代码清单:function sf_updateStatus(iBatchSerialno varchar2, iActFlag char , iRejectMemo varchar2) return sys_refcursor is cur sys_refcursor; PRAGMA AUTONOMOUS_TRANS...原创 2019-02-20 17:32:40 · 495 阅读 · 0 评论 -
Oracle游标中使用动态绑定变量
绑定变量的优点:避免每次执行相同SQL代码片段时的硬解析,系统可根据对已有SQL 代码hash值的匹配进行重复利用,减少系统资源的开支,加快查询速度!如果不使用绑定变量,那么每次执行相同的代码片段时,Oracle会认为都是一个新的SQL,会对其生成执行计划,等一系列查询前的操作。代码清单示例:select t.c_id ,t.c_name, t.c_age from studen...原创 2019-02-22 13:43:25 · 680 阅读 · 0 评论 -
ORA-00060:等待资源时检测到死锁
问题现象:1、在更新A表的某一条记录S1、并且未提交;2、然后再调用一个含有自治函数(procedure ***(serialno VARCHAR2,boType VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION;)的存储过程或函数,且该被调函数会更新A表的同一条记录S1;此时会发生Oracle 系统报错“ORA-00060: 等待资源时检测到死锁”...原创 2018-12-28 13:47:03 · 11579 阅读 · 0 评论 -
Oracle: ORA-06512:字符串缓冲区太小
问题现象:ORA-06512:字符串缓冲区太小报错截图解决思路:出现以上报错后点击"是",plsql会直接定位到以下的程序报错位置;plsql提示的报错位置由于是查询语句,我现在需要查出在查哪条数据时发生的这个报错,便于进行debug,一、在报错行之前使用dbms_output.put_line("v_accoid: " || v_accoid);在Ou...原创 2018-11-22 17:55:52 · 102327 阅读 · 6 评论 -
ORA-01840: 输入值对于日期格式不够长
问题现象:SQL语句:此处的c_birthday为varchar2类型,如果在Oracle10g这样转不会有问题,但是在Oracle11g会出现上面的报错现象,解决办法:为了兼容Oracle版本,建议不要在sql中进行转,放在java里去转比较好一点。...原创 2018-11-07 14:21:18 · 36210 阅读 · 2 评论 -
SQL查询慢的解决思路
前提:需要优化的sql符合oracle的高效语法规则,这里暂且不提1.在plsql工具中通过使用F5查看sql语句的执行计划2.如果走全表扫描,则可通过hints的方式更改CBO的扫描方式( TABLE ACCESS FULL 或者INDEX RANGE SCAN),hints 无法更改CBO的扫描方式,则需要考虑hints 的写法是否准确。hints语法规则:/*+INDEX(表或表...原创 2018-09-13 13:03:09 · 2479 阅读 · 0 评论 -
ORA-02069:此操作的global_names 参数必须设置为TRUE
场景:在本地数据库表A端通过dblink操作远程数据库表B:insert into B@dblink (select A.* from A),并且A.* 中有使用A端数据库的函数此时会报错:ORA-02069:此操作的global_names 参数必须设置为TRUE 网上查了很多资料,都是以下两种解决方案:1.在远程数据库上创建相同函数,然后在调用的时候 使用远程数...原创 2018-09-07 09:22:14 · 11837 阅读 · 0 评论 -
存储过程或函数中输出Long value值
很多时候我们在调试函数或存储过程的时候,经常会遇到想看变量的值,但是却显示Long value,让人很头疼,特此在这里写了一个过程,可用来在DBMS Output 窗口输出变量的值,可支持长达4GB的字符串数据。/**功能: 输出长字符串,可支持4GB的字符串数据,便于过程/函数的调试,若出现buffer overflow ,则可调大 dbms_output.enable(500...原创 2018-08-28 19:49:00 · 5335 阅读 · 1 评论 -
Oracle NUMBER类型字段的data_length 为什么是22?
抛出的这个问题,大家或许有意无意的发现自己Oracle数据库环境中的number类型字段的data_length 长度都为22?SQL:select t.DATA_TYPE, t.DATA_LENGTH, t.DATA_PRECISION, from user_tab_columns t where upper(t.TABLE_NAME) = upper('user')...原创 2018-08-15 16:08:55 · 5972 阅读 · 0 评论 -
Oracle报错:or 或in 操作数中不允许有外部连接符(+)的解决
问题现象:使用类似以下方式insert into TXXX@DBL_INTF (colunm_A)select column_Afrom (select column_A from table a where a.id = b.id oder by a.code)导出数据到中间表时会出现报错:or 或in 操作数中不允许有外部连接符(+)顺便说明下,我的查询sql语句里使用(+)作为外连接的关键字...原创 2018-05-28 16:40:48 · 4847 阅读 · 0 评论 -
Oracle去重后再进行count()计数
一般地:有意义的计数首先都需要去除重复,然后再进行count()计数!这个时候就去重的逻辑就显得尤为重要!一、首先说说我个人对以下两个函数的理解sum()是基于分组,也就是说有sum()的SQL语句中必须要有group by关键字,而count()可不必基于分组,二者在大多数情况下用以实现计数,但不同于count()的是,sum()内的字段必须要为number类型,常用于金额等数据的汇...原创 2018-05-21 22:03:06 · 25267 阅读 · 2 评论 -
Oracle“监听程序当前无法识别连接符中请求的服务”之解决方案
很多时候windows系统更新的时候会关掉系统默认自启动的一些服务,这样我们在用某些工具的时候可能会出现无法使用的情况。Oracle的一些服务就是很好的例子。早上和往常一样启动pl/sql登陆的时候就给我报了“监听程序当前无法识别连接符中请求的服务”的错误。网上查了一下,建议重新配置(Oracle)net manager中的监听程序(删除地址后再重新添加地址),照做之后发现还是无法解决这个问题,然...原创 2018-05-07 10:16:53 · 735 阅读 · 0 评论 -
Oracle对where条件中有null值字段的处理
如果返回结果中一个字段的值为null,那么如果使用该null值字段作为where条件时会有查不到的情况!例如:select c_flag c_id from tab where 1=1查询结果:下面使用有null值的字段c_flag作为查询条件进行测试:select c_flag c_id from tab where 1=1 and c_flag <> '1'查询结果:结果是没有数据...原创 2018-05-11 13:24:25 · 20938 阅读 · 6 评论