转至:http://www.cnblogs.com/Olive116/p/5149680.html

ORA-00907: 缺失右括号

前言

最近在开发过程中使用oracle数据库,在程序中进行查询数据时遇到了“ORA-00907: 缺失右括号”的问题,但是如果直接把sql语句直接在数据库或PL/SQL中执行时,却又能够正常查询,为了解决这个问题,折腾了半天,查找了一些资料,所以就对各种导致出现“缺失右括号”的情况进行了整理总结。行文如下。

1 union all中order by 导致缺失右括号

在有union all的子查询中使用了order by,会导致缺失右括号的错误,事实上在有union all的子查询中根本没必要进行排序,因为联合之后又组成了一个新的集合,之前的排序对新集合而言没什么用,直接查询联合之后的新集合然后再进行排序即可。

示例如下:

select * from

(

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_A

order by COLUMN_A

union all

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_B

order by COLUMN_A

) A;

解决方案如下:

select * from

(

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_A

union all

select COLUMN_A,COLUMN_B

from TABLE_EXAMPLE_B

) A;

order by COLUMN_A

2. in (子查询)的用法中,子查询不能使用order by!

此种情况跟1中描绘的有些类似,首先在in(子查询)用法使用order by 会报错,其次,子查询里用order by,纯属多此一举,子查询的目的,只是找出合适的数据。如果需要排序,在外边排即可。

示例如下:

Select * from TABEL_EXAMPLE where ID in(select ID from TABLE_EXAMPLE where ID>500 oder by ID DESC)

解决方案如下:

Select * from TABEL_EXAMPLE where ID in(select ID from TABLE_EXAMPLE where ID>500)oder by ID DESC

3. 创建表时,提示缺失又括号

3.1 创建表时关键字顺序错

示例如下:

CREATE TABLE T_EXAMPLE ( 
 id serial primary key, 
 t_id int not null default 0

)

解决方案如下:

CREATE TABLE T_EXAMPLE ( 
 id serial primary key, 
 t_id int default 0 not null

)

3.2 创建表时表中字段有关键字

示例如下:

CREATE TBALE T_EXAMPLE
(
  id       number(18,0) not null, 
  desc     varchar(45) not null

)

解决方案如下:

给对应的关键字加上双引号

CREATE TBALE T_EXAMPLE
(
  id       number(18,0) not null, 
  “desc”     varchar(45) not null

)

3.3 创建表时未对表中的字段设置长度

示例如下:

CREATE TABEL T_EXAMPLE

(

id bigint NOT NULL PRIMARY KEY,
name varchar NOT NULL

)

解决方案如下:

CREATE TABEL T_EXAMPLE

(

id bigint NOT NULL PRIMARY KEY,
name varchar(200) NOT NULL

)

3.4 创建主外键约束时外键类型跟主键类型不完全一致

主外键类型不完全一致时也会报缺失右括号的错误

4. SQL查询时发生缺失右括号错误

在查询时引发缺失右括号错误的原因大多数在于查询语句中有关于日期的转化、过滤。很多时候都是因为关于日期类型的转化少了单引号。

示例如下:

SELECT * FROM T_EXAMPLE Where T_DATE in(2015-01-20 22:37)

解决方案如下:

SELECT * FROM T_EXAMPLE Where T_DATE in(‘2015-01-20 22:37‘)

还有一种情况就是在where过滤中进行时间的转化时,有时候在sql/plus中直接执行没问题,但是在程序中却会出现错误。

示例如下:

SELECT * FROM T_EXAMPLE Where

ID in(select ID From T_EXAMPLE_B where D_DATE>=TO_DATE(‘2015-01-20’,’yyyy-mm-dd’))

该语句在数据库直接执行是没问题的,但是在程序中执行传入日期参数时有时会报缺失右括号的错误,为了解决这个问题,我们可以改变传入的日期参数的格式,如下:

SELECT * FROM T_EXAMPLE Where

ID in(select ID From T_EXAMPLE_B where D_DATE>=TO_DATE(20150120,’yyyy-mm-dd’))

还有一种关于oracle日期格式的错误是:ORA-01840: 输入值对于日期格式不够长

示例如下:select to_date(2015-01-01,'yyyy-mm-dd') from dual

为了解决这个问题,我们也可以用改变传入的日期参数的格式,来解决,如下:

select to_date(20150101,'yyyy-mm-dd') from dual

5. 其他导致缺失右括号的原因

5.1 书写错误,确实缺少了一个括号

5.2 字段名缺少双引号

如果在创建表时,表字段名全部是大写,则不存在此问题

[转]ORA-00907: 缺失右括号的更多相关文章

  1. ORA-00907: 缺失右括号

    创建表时出现ORA-00907: 缺失右括号的情况 调整关键字的顺序 CREATE TABLE s_dept(ID PRIMARY KEY NOT NULL NUMBER(7),NAME NOT NU ...

  2. ORA-00907: 缺失右括号 整理解决

    ORA-00907: 缺失右括号 前言 最近在开发过程中使用oracle数据库,在程序中进行查询数据时遇到了“ORA-00907: 缺失右括号”的问题,但是如果直接把sql语句直接在数据库或PL/SQ ...

  3. ORA-00907: 缺失右括号,原因及解决办法整理

    ORA-00907: 缺失右括号,原因及解决办法整理 1 union all中order by 导致缺失右括号 在有union all的子查询中使用了order by,会导致缺失右括号的错误,事实上在 ...

  4. ORA-00907: 缺失右括号(通用解决办法)

    PL/SQL 的SQL语句可以执行,但是放在hibernate中,后台打印,出现了错误. 错误的SQL解析:黄色为错误部分 Hibernate:      select         examine ...

  5. ORA-00907: 缺失右括号问题整理解决

    ORA-00907: 缺失右括号 前言 近期在开发过程中使用oracle数据库,在程序中进行查询数据时遇到了"ORA-00907: 缺失右括号"的问题.可是假设直接把sql语句直接 ...

  6. ORA-00907: 缺失右括号问题或com.alibaba.druid.sql.parser.ParserException: TODO :IDENTIFIER的原因

    以上只是说明错误的原因的一种.

  7. 【java】oracle好用,但java运行缺失右括号

    可能原因SQL拼接有空格被省略导致sql粘连. 解决办法,扩大拼接或者缩小拼接范围.

  8. 前端学习笔记系列一:8 <noscript>…</noscript>,网站路径,vscode跳出右括号

    1.<noscript>…</noscript> 在body中使用此段代码,可识别 <script> 标签但无法支持其中的脚本的浏览器. 此段代码意思为如果浏览器不 ...

  9. oracle 使用union提示ORA-00907:缺少右括号

    在使用union的时候提示:ORA-00907:缺少右括号 此原因是因为在union的左边和右边都有order by,因此需要去掉一边的order by,保留一个即可. 例如: select * fr ...

随机推荐

  1. Codeforces Round #243 (Div. 2) C. Sereja and Swaps(优先队列 暴力)

    题目 题意:求任意连续序列的最大值,这个连续序列可以和其他的 值交换k次,求最大值 思路:暴力枚举所有的连续序列.没做对是因为 首先没有认真读题,没看清交换,然后,以为是dp或者贪心 用了一下贪心,各 ...

  2. ArrayList和List之间的转换

    开发中不免碰到List与数组类型之间的相互转换,举一个简单的例子: package test.test1; import java.util.ArrayList; import java.util.L ...

  3. LA 2572 (求可见圆盘的数量) Kanazawa

    题意: 把n个圆盘依次放到桌面上,按照放置的先后顺序给出这n个圆盘的圆心和半径,输出有多少个圆盘可见(即未被全部覆盖). 分析: 题中说对输入数据进行微小扰动后答案不变. 所露出的部分都是由若干小圆弧 ...

  4. 【linux】命令

    pwd 显示路径 whereis jupyterhub find / -name base.py reboot 重启 grep

  5. #include<unistd.h>头文件的理解

    1.百度百科定义 unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称.该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故 ...

  6. Android 调用系统的邮箱app发送邮件

    第一种: String[] email = { "3802**92@qq.com" }; // 需要注意,email必须以数组形式传入 Intent intent = new In ...

  7. java 异常java.lang.UnsupportedOperationException

    在项目中采用一个枚举的集合,本人采用Collections中的空集合Collections.emptyList()在添加时发生异常: 常见集合如下: private List<VacationC ...

  8. (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...

  9. AFNetWorking 的简单使用

    转:http://blog.csdn.net/marujunyy/article/details/18424711 由于ASIHTTPRequest 不再更新了,不能使用block感觉不太好用:最后选 ...

  10. VS2010使用EventHandler发邮件

    转:http://blog.csdn.net/alfred_72/article/details/9980279 因为不知道VS2010 Sharepoint 有EventReciver这个添加项,走 ...