2012-05-03 10 views
2

私は2つのテーブルFacilitiesServicesを持っています。構文エラー:式が見つかりません(ORA-00936)

CREATE TABLE Facilities (
facility_id NUMBER(2) NOT NULL, 
facility_name VARCHAR2(20) NOT NULL, 
CONSTRAINT pk_facil_id PRIMARY KEY (facility_id) 
); 

CREATE TABLE Services (
service_id NUMBER(2) NOT NULL, 
service_name VARCHAR(20) NOT NULL, 
service_facility NUMBER(2) NOT NULL, 
CONSTRAINT pk_serviceid PRIMARY KEY (service_id) 
); 

ALTER TABLE Services 
add CONSTRAINT fk_servicefacility FOREIGN KEY(service_facility) 
REFERENCES Facilities(facility_id); 

私はそうのように「サービス」テーブルにレコードを入力しようとした場合:

INSERT INTO Services (service_id, service_name, service_facility) 
SELECT 06, 'Rooms', 
(SELECT facility_id, FROM Facilities WHERE facility_name = 'Hotel') 
FROM Dual; 

私は3のエラー「という表現を欠けている」7つの挿入文から抜け出します。どのような表現が欠けていますか?

+0

サービスにはFacilitiesIDが必要です。これはFacilityテーブルの主キーの外部キーです。ファシリティテーブルには、サービステーブルへの参照がありません。次に、施設で各サービスのサービスレコードを作成する必要があります。もし2つの施設が水を提供すれば、あなたは2つの記録、1つは水と施設1、もう1つは水と施設2になります。 –

+0

@StefanH私は何をしようとしているのか分かりません。私は施設に「健康センター」と言う。このヘルスセンターには、「ジム」、「プール」、「スパ」があります。しかし、私は 'ジム 'を他の施設で利用できないようにしたいと考えています – adohertyd

+0

はい、あなたのテーブル構造は正しいですが、レコードを正しく追加していますか? –

答えて

4

投稿したSQL文に余分なカンマがあります。行方不明の式とエラーが

SQL> ed 
Wrote file afiedt.buf 

    1 INSERT INTO Services (service_id, service_name, service_facility) 
    2 SELECT 06, 'Rooms', 
    3 (SELECT facility_id, FROM Facilities WHERE facility_name = 'Boston') 
    4* FROM Dual 
SQL>/
(SELECT facility_id, FROM Facilities WHERE facility_name = 'Boston') 
        * 
ERROR at line 3: 
ORA-00936: missing expression 

あなたはカンマを削除すると、文は

SQL> ed 
Wrote file afiedt.buf 

    1 INSERT INTO Services (service_id, service_name, service_facility) 
    2 SELECT 06, 'Rooms', 
    3 (SELECT facility_id FROM Facilities WHERE facility_name = 'Boston') 
    4* FROM Dual 
SQL>/

1 row created. 
の作品を発生し、正確にどこを示しています。あなたは、SQL * Plusでのステートメントを実行した場合は、ORA-00936がスローされます

しかし、私は通常dualからスカラーサブクエリを選択するのではなく、Facilitiesから選択するステファンの構文を好むことに注意してください。

+0

@adohertyd - あなたは 'INSERT'ステートメントを投稿しようと思いますか? –

+0

@adohertyd - あなたの本当の問題に対処できるように、あなたの質問にそのSQLを投稿してください。 –

+0

@JustinCave私のオリジナルの質問を編集しました – adohertyd

2

あなたのinsert文は次のようになります。

それの現在の状態では
INSERT INTO 
    Services 
    (
     service_id, 
     service_name, 
     service_facility 
    ) 
SELECT 
    06, 
    'Rooms', 
    facility_id 
FROM 
    Facilities 
WHERE 
    facility_name = 'Hotel' 

私が提供クエリはホテルの名前で各施設の部屋のためのサービスレコードを追加します。

そして、適切な数の挿入物を得るために、あなたの 'Dual'テーブルへの結合を追加してください。

+0

これは常にこのタイプの入力の正しい構文ですか?私は、私が投稿したものと同じ構文で、うまく動作する他のテーブルのためのいくつかの 'INSERT'ステートメントを持っています。私はSQLに慣れていないし、これらの構文のいくつかで苦労している – adohertyd

関連する問題