5

私は2つのテーブルを持っていFacilitiesますServices.

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;

7 個の挿入ステートメントのうち 3 個で「式がありません」というエラーが発生します。足りない表現は?

4

2 に答える 2

8

投稿した SQL ステートメントには余分なコンマがあります。SQL*Plus でステートメントを実行すると、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> /
(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.

ただし、一般的には、スカラー サブクエリでFacilities選択するよりも、選択する Stefan の構文を好むことに注意してください。dual

于 2012-05-03T22:53:31.283 に答える
3

挿入ステートメントは次のようになります。

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

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

次に、「デュアル」テーブルに結合を追加して、正しい数の挿入/正しい機能を取得できるようにします。

于 2012-05-03T23:02:19.890 に答える