oracle 数据库显示缺失右括号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 数据库显示缺失右括号相关的知识,希望对你有一定的参考价值。

SQL> create table student(
2 snum char(10) primary key,
3 sname varchar(10),
4 class num (2),
5 birthday date);
class num (2),
*
第 4 行出现错误:
ORA-00907: 缺失右括号

4 class num (2),
改为
4 class number(2),

楼上说的关于char和varchar2的区别我再补充一下
当此字段用作关联条件时:
char的关联方式是全部关联
varcahr2的关联方式是一位一位关联
比如一个字段内容为boy
char的关联就是"boy"三个字母一次性匹配关林
varchar2就是先匹配b 符合再匹配o 最后匹配y
但是varchar2是变长字符型,所以如果你的这个boy字段类型为char(10),依旧占用10个字节,如果是varchar2(10)则只会占用3个字节。
看楼主需要了,纯手打,求采纳
参考技术A 1、number,不是number;
2、char是可以用的,不过一般式你确认你定义的字段的长度和实际应用中的长度基本一致,可以提高效率。不过在这个场景中,你定义的是,一般是2、3、4个中文字,定义的话是4、6、8个字节,建议定义成varchar2,能够节约空间。本回答被提问者和网友采纳
参考技术B 建表语句有问题,把num改成number即可。另外不建议用char和varchar,用varchar2类型吧。 参考技术C 第四行num改成number 不要括号 参考技术D Oracle里没有num类型啊,把num改成number就行了

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

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 * fromTABEL_EXAMPLE where ID in(select ID from TABLE_EXAMPLE where ID>500 oder byID DESC)

解决方式例如以下:

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

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

3.1 创建表时keyword顺序错

示比例如以下:

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 创建表时表中字段有keyword

示比例如以下:

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

)

解决方式例如以下:

给相应的keyword加上双引號

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

)

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

示比例如以下:

CREATE TABELT_EXAMPLE

(

id bigint NOT NULL PRIMARY KEY,
name varchar NOT NULL

)

解决方式例如以下:

CREATE TABELT_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

为了解决问题,我们也能够用改变传入的日期參数的格式,来解决,例如以下:

selectto_date(20150101,‘yyyy-mm-dd‘) from dual

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

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

5.2 字段名缺少双引號

假设在创建表时,表字段名所有是大写,则不存在此问题

 

以上是关于oracle 数据库显示缺失右括号的主要内容,如果未能解决你的问题,请参考以下文章

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

ORA-00907:缺失右括号

在线急等!ORA-00907: 缺失右括号 为啥报这个错误?

oracle行转列总是出现ora-00906出现缺失左括号

右括号缺失 ora-00907

Oracle适配问题解决