我有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个出现错误“缺少表达式”。缺少什么表达?
答案 0 :(得分:6)
您发布的SQL语句有一个额外的逗号。如果在SQL * Plus中运行该语句,它将抛出ORA-00936:缺少表达式并准确显示错误发生的位置
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.
但请注意,我通常更喜欢Stefan的语法,您从Facilities
中选择,而不是从带有标量子查询的dual
中选择。
答案 1 :(得分:2)
您的插入声明应为:
INSERT INTO
Services
(
service_id,
service_name,
service_facility
)
SELECT
06,
'Rooms',
facility_id
FROM
Facilities
WHERE
facility_name = 'Hotel'
在它的当前状态下,我提供的查询将为每个设施的房间添加一个服务记录,名称为Hotel。
然后在“双”表中添加连接,以便获得正确数量的插入/获得正确的设施。