sql - 语法错误 : missing expression (ORA-00936)

标签 sql oracle database-design foreign-keys ora-00936

我有 2 张 table ,FacilitiesServices .

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 个,我收到错误“缺少表达式”。缺少什么表达?

最佳答案

您发布的 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.

但是请注意,我通常更喜欢 Stefan 的语法,您可以从 Facilities 中进行选择。而不是从 dual 中选择带有标量子查询。

关于sql - 语法错误 : missing expression (ORA-00936),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440306/

相关文章:

Python + SQLAlchemy + Oracle + 序列 = 无法插入新行

sql - 基于用户角色权限的数据库设计

php - 如何从关系数据库中的多值属性中检索数据?

mysql - 删除VB.NET中的SQL语句

php - 试图合并两个嵌套查询以提高效率

oracle - 在 R 中调用 Oracle 存储过程 - 如何获取结果集?

database - 数据库/实体设计 : table related to any one of multiple tables

php - fatal error : Call to a member function prepare() on a non-object in pdo

php - 如何在 Laravel Eloquent ORM 中选择以数字开头的单词?

sql - 将单个值插入到新创建的列中