следующее заявление работает в MSSQL:Эквивалент IF НЕ СУЩЕСТВУЕТ в Oracle?
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' ..."
Попробуйте «выполнить немедленный» вариант. , .'' – GurV
Вам нужен блок PL/SQL с динамическим SQL для этого –
Спасибо GurV, теперь получаем еще одну ошибку, что внешний ключ уже существует. Кажется, что что-то не так с IF. При выполнении SELECT возвращает одну строку, но все еще пытается выполнить ALTER ... – Powerslave