SQL错误:ORA-00907:缺少右括号

时间:2011-12-04 16:23:05

标签: sql oracle oracle-sqldeveloper

我正在使用Oracle SQL开发人员使用以下命令创建基本表:

CREATE TABLE chartered_flight(
   flight_no NUMBER(4) PRIMARY KEY
   , customer_id FOREIGN KEY
   , aircraft_no FOREIGN KEY
   , flight_type VARCHAR2 (12)
   , flight_date DATE NOT NULL
   , flight_time TO_DATE 'HH:MI' NOT NULL
   , takeoff_at CHAR (3) NOT NULL
   , destination CHAR (3) NOT NULL
)

缺少右括号在哪里?或者我使用的语法不正确。

我做了以下更改:

CREATE TABLE chartered flight(
   flight_no NUMBER(4) PRIMARY KEY
   , customer_id NUMBER(6) REFERENCES [customer]([customer_id])
   , aircraft_no NUMBER(4) REFERENCES [aircraft]([aircraft_no])
   , flight_type VARCHAR2 (12)
   , flight_date DATE NOT NULL
   , flight_time INTERVAL DAY TO SECOND NOT NULL
   , takeoff_at CHAR (3) NOT NULL
   , destination CHAR (3) NOT NULL)

现在我收到了这个错误:

Error at Command Line:1 Column:23
Error report:
SQL Error: ORA-00922: missing or invalid option
00922. 00000 -  "missing or invalid option"
*Cause:    
*Action:

我觉得这与TO_DATE有关,还是因为我还没有创建我的飞机桌,所以缺少飞机_no?请帮助一下,谢谢。

3 个答案:

答案 0 :(得分:2)

没有名为TO_DATE的类型。 To_DATE用于将字符串转换为日期。

因此create语句应该类似于

CREATE TABLE chartered_flight(
    flight_no NUMBER(4) PRIMARY KEY, 
    customer_id FOREIGN KEY, 
    aircraft_no FOREIGN KEY, 
    flight_type VARCHAR2 (12), 
    flight_date DATE NOT NULL,
    flight_time VARCHAR(4) NOT NULL, 
    takeoff_at CHAR (3) NOT NULL, 
    destination CHAR (3) NOT NULL)

从表格中选择数据时,您可以使用to_date。例如

Select to_date(flight_date, 'yyyy/mm/dd') from chartered_flight;

答案 1 :(得分:1)

要指定外键约束,您应该使用内联customer_id [type] REFERENCES [master_table_name]([master_column_name])或外联语法:, CONSTRAINT [constraint_name] FOREIGN KEY(customer_id) REFERENCES [master_table_name]([master_column_name])查看更多示例here。此外,通常在外键列上添加索引是有意义的。

对于flight_time,您可能需要使用INTERVAL DAY TO SECOND类型

答案 2 :(得分:0)

  

ALTER TABLE EMPLOYEE_DETAILS ADD(   EMPLOYEE_ID号码(10),   员工姓名VARCHAR2(100),   );

以上ALTER语句导致以下错误 错误报告:
SQL错误:ORA-00907:缺少右括号
00907. 00000 - "错过右括号"
*原因:
*行动:

我怎么纠正自己,这是正确的。

  

ALTER TABLE EMPLOYEE_DETAILS ADD(   EMPLOYEE_ID号码(10),   EMPLOYEE_NAME VARCHAR2(100),   );

解决方案:第二列名称中有一个空格导致此错误。

谢谢,
曼尼