[转]ORA-00907: 缺失右括号

转至: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 字段名缺少双引号

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

时间: 2024-11-04 03:48:14

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

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

ORA-00907: 缺失右括号 前言 近期在开发过程中使用oracle数据库,在程序中进行查询数据时遇到了"ORA-00907: 缺失右括号"的问题.可是假设直接把sql语句直接在数据库或PL/SQL中运行时.却又能够正常查询,为了解决问题,折腾了半天.查找了一些资料,所以就对各种导致出现"缺失右括号"的情况进行了整理总结. 行文例如以下. 1 union all中order by 导致缺失右括号 在有union all的子查询中使用了order by,会导致缺失

sql语句正确,但是报错java.sql.SQLSyntaxErrorException ORA-00907: 缺失右括号

sql语句如下,在oracle中带入参数能正常执行,在java程序中则报错java.sql.SQLSyntaxErrorException ORA-00907: 缺失右括号 select re.*, tbp.taskid, tbp.processtype, tbp.processstatus, tbp.timeLimit, tbp.createtime    posttime, tbp.proContent    dealContent from biz_t_tasktroubleprocess

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

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

利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)

利用栈判断输入的表达式中的括号是否匹配(假设只含有左.右括号) bool Match(char exp[],int n) { int i=0; char e; bool match=true; SqStack *st; InitStack(st);//初始化栈 while(i<n && match)//扫描exp中所有字符 { if(exp[i]=='(')//当前字符为左括号,将其进栈 Push(st,exp[i]); else if(exp[i]==')')//当前字符为右括号

Oracle创建表格报ORA-00906:缺失左括号错误解决办法

来源于:http://www.linuxidc.com/Linux/2013-06/85297.htm 解决办法: create table myTable(id number(5,2),name varchar(10)) 即在varchar后面加上长度.

Oracle基础(五):多表查询

一.多表查询 (一)简单多表查询 1.多表查询的机制 1)SQL: SELECT * FROM emp; --14条记录 SELECT * FROM dept;--4条记录 SELECT * FROM emp,dept;--显示56条数据??为什么 2)分析: 先从 dept 选择一条记录(deptno=10).分别于 emp中的14条记录分别匹配.显示14条记录. 再从 dept 选择一条记录(deptno=20),分别于 emp中的14条记录分别匹配.显示14条记录. 依次类推. water

“mybatis 中使用foreach 传

为了帮助网友解决“mybatis 中使用foreach 传”相关的问题,中国学网通过互联网对“mybatis 中使用foreach 传”相关的解决方案进行了整理,用户详细问题包括:mybatismapsql <update id="updateallByEntity" parameterType="java.util.List"> update T_WEEKDAY <foreach item="item" index="

单行函数&#183;上

SQL> -- 大写 小写 首字母大写SQL> select upper('hello world') 大写, lower('Hello World') 小写,initcap('hello world') 首字母大写 from dual; 大写                   小写                   首字母大写                                                                                  

oracle常见错误

1.一个update和delete可以害死一大片人,因为人人都觉得这个句子很好写,不就是: update table set a=x,b=y: delete from table where name=xx 当然,现在我说到这个问题了,大家肯定不以为然,这么简单,谁不会啊,其实我也是这么想的(在没有遇到这个问题之前),这么简单的sql,初学者都会,我怎么可能不会,开什么玩笑!就因为这一个问题,害的我几小时不能平静,你懂得作为一个员工,突然出了错却不知道如何补救时的心情,所以大家谨记吧,笑过了之后