![](https://img-blog.csdnimg.cn/20190905091710695.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
oracle
Oracle编程示例与ORA-BUG经验
穿条秋裤到处跑
Wu,Rosen Wanlong
展开
-
sqlserver执行更新语句时出现异常,t 附近有语法错误
之前一直是用的oracle进行开发,偶尔也用用mysql,现在项目中遇到金蝶的k3系统,就不得不用用sqlserver,看似大差不差的sql语言,换个数据库类型其实还是感觉蛮别扭的。在sqlserver中执行简单的更新操作时报错:xxx附近有错。这个,,错误提示有点模糊啊。 update user t set t.age = 27 where t.name = 'wuwl'举了个类似的例子如上,这种写法在sqlserver中是会报错的,原因是**不能用别名** 。而这种写法在oracle中是完原创 2020-06-30 15:10:47 · 2634 阅读 · 0 评论 -
ORACLE数据库定时任务自动停止(broken)的原因分析及解决办法
ORACLE的定时任务,可以通过USER_JOBS这张边进行查询详细信息。今天,生产环境的数据库定时任务莫名其妙的死掉了。首先,broken选项是打上√的,一般情况下,去掉该√选项,点击Apply即可重新恢复正常。但是如果类似于下面这种情况,及时去掉√选项,也是启动不了的。有两个地方需要关注,一个是Next date的日期居然是4000/1/1,另一个关注点在于Failures次数已经累计达...原创 2020-04-24 17:16:35 · 7529 阅读 · 0 评论 -
ORA-01502-对应的快速解决办法(索引或这类索引的分区处于不可用状态)
ORA-01502指的是索引失效或不可用,造成失效的原因,大多是在数据迁移,表移动等操作过程中出现的异常。下面提供两种简单快捷的恢复方案:针对普通索引,采用重命名的方式解决。用plsql打开表信息,直接手动修改indexes的名字,在apply即可修复。针对唯一索引,采用重新创建keys的方式解决。唯一索引的名字是没有办法直接修改的,非空和唯一两个条件即为主键,去掉主键的Enabled...原创 2020-04-23 16:35:27 · 2471 阅读 · 0 评论 -
plsql突然无法连接数据库,原来是tnsnames.ora文件出了问题
昨天因为一些特殊原因,卸载了本机的ORACLE数据库,相对还是卸载的比较成功干净(回想起那些年卸载不干净导致重装系统的岁月,都是泪啊)但是之前安装的plsql客户端突然用不了了,连接其它服务器的oracle都连不上。具体的表现状态就是,选择数据库地址,输入用户名/密码过后,点击OK后就转圈圈,没反应。怀疑过卸载ORACLE时,破坏了一些plsql的相关注册表或文件。但更加怀疑是tnsnam...原创 2020-04-09 11:57:27 · 1599 阅读 · 0 评论 -
ORACLE查询通用查询被锁对象以及解锁方案
锁表锁存储过程遇到过好多次,有的是代码漏洞,没有回滚事物;有的时候就是网不好,存储过程调试着就断了,关了PLSQL之后,那个session其实还在,就锁死了,必须要手动杀死才行。之前有的项目还有这种情况,处理单据时,锁住单据行,然后回滚的时候其实不是同一个数据库连接对象,回滚了也没有,更有甚者,抛出异常了没有回滚,直接gg,锁了好多行。1、2比较简单粗暴,疗效也不错2、3比较稳,一个个确认后...原创 2019-12-05 12:01:50 · 457 阅读 · 0 评论 -
ORACLE常用的一些特殊SQL,收藏收藏,下次需要的时候就不用再翻箱倒柜了
1.创建目录 (必须有分号;)create directory 目录名 as '目录路径';2.授权目录给其他用户 (必须有分号;)grant read,write on directory 目录名 to 用户名; 3.查询所有目录select * from dba_directories4.查询数据库版本sqlplus -vselect * from v$version;...原创 2019-12-05 11:51:26 · 171 阅读 · 0 评论 -
通过GREATEST函数获取多张关联表的最大更新时间,视图和数据同步时均可用
在数据同步接口中,取数据时关联了多张表,取了不同表的不同字段,每次获取数据增量时,通过LAST_UPDATE_DATE最后更新时间字段来判断。但是,当需要取的数据来自多张表关联,或者是一个视图时,单纯根据某张表的LAST_UPDATE_DATE来判断该条数据是否该更新,显然不合理。此时可使用ORACLE的函数:greatest( expr1, expr2, … expr_n )来获取多张表的...原创 2019-11-19 11:00:14 · 631 阅读 · 0 评论 -
Oracle ORA-06861: 文字与格式字符串不匹配 记录两次无助的遭遇:存储过程直接执行正常,java调用存储过程则报错
一天之内,出现了两次这样的尴尬遭遇:将参数直接放到存储过程中执行时,程序运行正常,但是通过java程序去调用数据库存储过程时,就抛出异常。我和我的同事分别遇到了一次,但是,原因却大不相同。先说说我的:)通过前端点击按钮执行程序后,所报的错误居然不在存储过程内部,而是同一个包下,另一个验证程序所报验证失败错误。我反复检测了自己的java代码以及存储过程内部的代码,确定以及肯定自己没有去调用那...原创 2019-11-03 19:04:23 · 798 阅读 · 0 评论 -
SQL语句查询条数不足10行时如何自动补充空行
在用ireport只做报表时,客户要求显示至少十行数据,不足十行时,显示空行。ireport的数据源是数据库sql,一般情况就是查出来,是多少就显示多少。现在这个报表,需要嵌入子表,如果头表只有一条或数据比较少时,头行之间的空表会比较难看,所以要求显示空行信息。数据少于10条1)普通SQL查询SELECT ITEM_ID || '' ITEM_ID, ITEM_CODE, DESC...原创 2019-11-03 18:46:46 · 7949 阅读 · 2 评论 -
记录一次ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exis故障【已解决】
本地ORACLE数据库使用了很久了,一直没问题,但是,昨天突然就无法登陆。百度了好久,都没有查到有效的解决方案,不过在这个过程中也还是对某些文件配置有了更多的了解。首先建议熟悉一下四个命令行命令,可以方便有效的启动/停止数据库服务和监听服务--启动数据库实例服务(其中oracleserviceorcl为你的数据库实例服务名,可以通过cmd-service.msc查看你的数据库服务名)ne...原创 2019-10-16 13:33:53 · 5316 阅读 · 0 评论 -
ORA-01502: 索引或这类索引的分区处于不可用状态 [已解决]
同事迁移数据库后,在新的环境下,部分索引状态变为UNUSABLE,即不可使用的非正常状态。造成这个问题的原因可能是因为根据用户导出DMP文件时,表对象存在于不同的表空间中,我记得第一次在命令行导入该表时还出了一些问题的。出现这种问题,想要直接删除该索引还删不掉,弹出框显示:You cannot delete primary/unique key indexes。此时该表中存在大量的数据,无法删除...原创 2019-10-11 16:28:24 · 1955 阅读 · 0 评论 -
LeetCode-185 : sql分组排序再取前几位
题目描述:在EMPLOYEE表中查询每个部门工资前三高的员工。题目分析:题目中还是已经描述的比较清楚,比如某个部门工资按从高到低排序为9000,8900,8900,8500,8000…那么该部门需要查询出的其实有四位,分别是9000,8900,8900,8500。这其实也很好理解,比如说最高的工资9000,同部门的有四个人,那么如果查询条数为3的话,该显示哪3位呢?所以,这里的工资应该去重...原创 2019-09-05 16:10:50 · 470 阅读 · 0 评论 -
java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
最近写了特别多的数据库同步接口,需要在java程序中拼接大段的sql,然后再提交执行,出现了很多次ORA-00923错误,都有点见怪不怪了。比如下面这段代码,在执行 db.execute(insertSql) 时肯定会报这个错误的。@Overridepublic int doInsert(DB db,InterfaceLogBean logBean) { StringBuilder i...原创 2019-09-04 16:10:46 · 4226 阅读 · 0 评论 -
通过DBLINK跨数据库查询,同步创建表结构,插入表数据
最近在做接口开发的时候,先要梳理ERP系统的物料表,字段很多,与我们系统很多字段需要对应起来,就考虑在本地同步这样一张表结构以及对应的数据。表结构差不多400多个字段,数据在40k左右,以前项目数据备份都用的EXPDP导出再导入,感觉不适合现在的场景。导入表结构其实很方便,查看sql,复制粘贴,把表空间和不需要的信息去掉就可以了。在同步数据的时候,sql develop自带的数据导出功能,但感觉...原创 2019-07-16 11:33:40 · 6062 阅读 · 3 评论 -
JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析
JDBC(Java Database Connectivity):Java访问数据库的解决方案。JDBC只定义接口,具体实现由各个数据库厂商负责。原生jdbc技术的使用基本都是模板式的开发,基本格式比较固定。 JDBC增删改查 try{//导入驱动包、加载具体驱动类Class.forName("具体驱动类");//与数据库建立连接,不同数据库写法可能不同,相同数据库不...原创 2019-07-17 14:24:57 · 481 阅读 · 0 评论 -
Oracle数据同步接口中,对于NUMBER、DATE类型数据,从resultSet中直接获取造成精度丢失的解决方案
通过JDBC获取ORACLE数据库数据时,返回值统一都是ResultSet对象,就像存储过程中的游标,一行一行的读取数据。对于NUMBER和DATE类型的数据,如果java代码中直接用resultSet.getInt()、resultSet.getDate()等,往往会存在一些精度上的丢失。NUMBER类型NUMBER数据类型既可以标识整数,也可以表示小数,所以大部分情况下表中的数字类...原创 2019-07-24 17:00:46 · 1656 阅读 · 0 评论 -
Oracle数据同步接口,增量数据从ERP系统到本地临时表封装解决方案
项目的许多基础数据需要从ERP系统中同步基础数据,例如:物料、客户、供应商、仓库等等。之前做过一次比较死板的标准流程:1.通过JDBC取ERP系统的增量数据;2.解析;3.然后用自己项目的DB对象存进本地数据库临时表中;4.最后再本地分析增量数据完成新增或更新操作。逻辑相对简单,过程不再赘述,只是要注意空对象以及时间格式的数据要做一些处理。由于目标数据库的表与本地数据库临时表可以建成...原创 2019-07-24 17:31:29 · 753 阅读 · 0 评论 -
ORACLE数据库 基础练习表EMP\DEPT \SALGRADE脚本
--如果数据库本身已经有同名的表,不能重复创建的 DROP TABLE EMP;DROP TABLE DEPT;DROP TABLE SALGRADE;--创建员工信息表 CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), ...原创 2019-07-26 14:22:29 · 1975 阅读 · 2 评论 -
ORACLE SQL分组查询某列或某几列重复信息数量
实际开发中经常会需要分组查询某列或者某几列重复的数据量,比如说统计彩票开奖号码历史出现的次数等。以下SQL以数据库本地EMP表数据为例--查询所有员工信息SELECt * FROM EMP;--以JOB分组查询每种JOB对应的员工数量SELECT JOB,COUNT(JOB) TOTALNUM FROM EMP GROUP BY JOB ORDER BY COUNT(JOB) A...原创 2019-07-26 15:07:08 · 4447 阅读 · 0 评论 -
ORACLE 数据同步时,批量进行新增和更新操作的SQL写法
场景模拟:比如自己项目的一张EMP员工信息表,数据来源需要从第三方系统获取,随时可手动同步更新,也可以定时自动同步。一般情况下,通过创建时间或者最后更新时间,获取自上次同步后的数据增量,全部插入本地的临时表EMP_TEMP中,临时表结构与正式表结构一致。再通过主键判断的方式,批量进行新增和更新,这种方式处理效率较高。--主键为EMPNO--批量更新UPDATE EMP E SET ...原创 2019-07-26 16:22:18 · 1588 阅读 · 3 评论 -
无法通过ip地址连接其它电脑的数据库,但是又可以ping通,错的不是配置,而是差了一个步骤
真是场景其实是这样的,在建项目有很多同步数据的接口,数据暂时在我自己的oracle数据库上,所以,需要使用jdbc产生连接到本地数据库的对象,进而获取数据。但是web程序却在产生连接对象时出现异常,首先,我排查的是本地系统的防火墙,直接先关闭;然后在服务器上ping自己电脑的ip地址,发现也可以ping通,但是,系统还是无法创建连接对象的实例,fk用plsql连接本地数据库,一般用localh...原创 2019-08-26 17:15:53 · 4906 阅读 · 0 评论 -
ORA-01427: 单行子查询返回多个行 出现原因及对应防止措施
今天的一段批量更新的sql语句,稍微修改了一下就报错:ORA-01427: 单行子查询返回多个行。这个问题其实之前有遇到过几次,原因也比较简单,就是没有做好子查询的约束条件,导致该返回一条数据的地方返回了多条。下面这段sql其实不应该报错的,只是我在多个数据库环境中切换的时候,没有同时更新到最新的表结构导致的。跳过这段SQL,详细分析一下这个问题出现的原因以及有效的避免方法。UPDATE P...原创 2019-08-29 17:26:22 · 44059 阅读 · 1 评论 -
oracle中lag()函数和lead()函数的用法(图文)
lag和lead函数可以在同一次查询中取出同一字段的前N行数据(lag)和后N行数据(lead)。这种字段可以使用对相同表的表连接来实现,不过使用lag和lead函数具有更高的效率。语法:LAG(EXP_STR,OFFSET,DEFVAL)OVER()LEAD(EXP_STR,OFFSET,DEFVAL)OVER()EXP_STR:要取的列OFFSET: 取偏移后的第几行数据...原创 2019-07-03 17:14:04 · 5810 阅读 · 0 评论