2011-12-04 35 views
1

私は、次のコマンドを使用して基本的なテーブルを作成するには、Oracle SQL Developerを使用しています:SQLエラー:ORA-00907:欠落している右括弧

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 
) 

欠落している右括弧がありますか?または、私が誤って使用した構文です。

私が行った次の変更:私はTO_DATEに何かあるか、私が持っているので、それを感じている

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: 

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) 

は今、私はこのエラーを取得します私の航空機テーブルはまだ作成されていないので、aircraft_noはありませんか?ありがとうございました。

+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を参照してください。また、通常、外部キー列にインデックスを追加するのが理にかなっています。あなたはおそらく、ALTER文の上にINTERVAL DAY TO SECONDタイプ

+0

私はあなたが示唆した変更を加えましたが、今私は新しいエラーが発生しました。ありがとうございます。 –

+0

'CREATE TABLE'に角括弧は必要ありません。私の答えでは、実際の値を入れなければならないと指定するために使用します。したがって、あなたは 'customer_id NUMBER(6)REFERENCES customer(customer_id)'を必要とします。 – a1ex07

+0

私はその変更を行いましたが、 @ a1ex07 –

2

TO_DATEと呼ばれるタイプはありません。 To_DATEは、文字列を日付に変換するために使用されます。

ので、作成する文は、テーブルからデータを選択するときは、TO_DATEを使用することができます

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) 

のようなものでなければなりません。例

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

しかし、私が時間をHHに限定したいのなら、どうすればいいですか? DD/MM/YYのデフォルトのoracleデータ型を参照してください。 –

+0

flight_timeをvarchar2として宣言し、チェック制約を使用してデータを検証できます。 – ziggy

+2

flight_timeを分単位の数値として使用する方が良いでしょう。使用する測定単位の最小単位であれば、それをコードで時間/日に変換できます。可能であれば、私は確かにvarcharとして保存された番号を持っていないだろう。バウンドしてトラブルを引き起こす。 – Ben

0

ALTER TABLE EMPLOYEE_DETAILS ADD ( EMPLOYEE_ID NUMBER(10), EMPLOYEE NAME VARCHAR2(100), );

を使用する必要がflight_timeについては

は、以下のエラーが発生しました。
エラーレポート:
SQLエラー:ORA-00907:欠落している右括弧
00907. 00000 - "右括弧が欠落"
*原因:
*アクション:私は私の自己を整流してきたどのようにこれまで

とここに正しいものがあります。

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

解決方法:このエラーの原因となった2番目の列の名前にはスペースがあります。 []で

おかげで、
MANNE

関連する問題