【发布时间】:2017-06-23 14:42:26
【问题描述】:
以下语句在 MSSQL 中有效:
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[FK_StationObjectsID]') AND parent_object_id = OBJECT_ID(N'[Attendance]'))
BEGIN
ALTER TABLE Attendance ADD CONSTRAINT FK_StationObjectsID FOREIGN KEY (StationObjectsID) REFERENCES stationobjects (stationobjectsid)
END
我在 Oracle 中尝试过:
IF NOT EXISTS (SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_STATIONOBJECTSID' AND TABLE_NAME = 'ATTENDANCE') THEN
BEGIN
ALTER TABLE Attendance ADD CONSTRAINT FK_StationObjectsID FOREIGN KEY (StationObjectsID) REFERENCES stationobjects (stationobjectsid);
END;
但它给了我一个错误 PLS-00103 “遇到符号 'ALTER'...”
【问题讨论】:
-
试试
execute immediate 'alter . . .' -
你需要一个带有动态 SQL 的 PL/SQL 块
-
感谢 GurV,现在收到另一个错误,即外键已经存在。好像IF有什么问题。执行 SELECT 时返回一行,但仍在尝试执行 ALTER ...