Błąd składniowy: brak wyrażenia (ORA-00936)


Mam 2 tabele:
Udogodnienia
i
Usługi
.
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);

Jeśli spróbuję wprowadzić rekordy w tabeli „Usługi” w ten sposób:
INSERT INTO Services (service_id, service_name, service_facility) 
SELECT 06, 'Rooms',
(SELECT facility_id, FROM Facilities WHERE facility_name = 'Hotel')
FROM Dual;

Otrzymuję błąd „brakujące wyrażenie” dla 3 z 7 instrukcji wstawiania. Jakiego wyrażenia brakuje?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W opublikowanej instrukcji SQL znajduje się dodatkowy przecinek. Jeśli uruchomisz instrukcję w SQL * Plus, wyświetli ORA-00936: brak i pokaże dokładnie, gdzie wystąpił błąd
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

Jeśli usuniesz przecinek, operator działa
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.

Zauważ jednak, że zwykle wolę składnię Stefana, w której wybierasz
Udogodnienia
zamiast
dual
z podzapytaniem skalarnym.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Twoja instrukcja powinna być:
INSERT INTO 
Services
( service_id,
service_name,
service_facility
)
SELECT
06,
'Rooms',
facility_id
FROM
Facilities
WHERE
facility_name = 'Hotel'

W obecnym stanie żądanie, które przesłałem, spowoduje dodanie rekordu obsługi pokoju dla każdego obiektu wraz z nazwą hotelu.
Następnie dodaj sprzężenie do swojego stołu „Dual”, aby uzyskać odpowiednią liczbę insertów/uzyskać właściwe środki.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się