oracle plsql с оператором WITH в сочетании с INSERT
Во время миграции функций postgresql 9 возникла следующая проблема: в Oracle вы можете использовать WITH только в сложных операторах select. Между тем, в postgres (и MS SQL 2008 тоже) вы можете использовать WITH и INSERT (update, delete) вместе.
Пример:
WITH prerows AS ( SELECT ObjectID, LoginID, Param FROM devices D
WHERE D.DevNum = '0003' AND ObjectID IS NULL )
INSERT INTO dev_sub( ObjectID, LoginID, Param )
SELECT ObjectID, LoginID, Param FROM prerows;
Запрос отлично работает в PostgreSQL 9.2, но пишет ошибку в Oracle 11 XE: "ORA-00928: отсутствует ключевое слово SELECT". Может я просто что-то пропустил? Я увлекаюсь Oracle, и мне было бы жаль, что он не может объединить оператор WITH и команду INSERT.
С наилучшими пожеланиями, Энтони
2 ответа
Пытаться:
INSERT INTO dev_sub( ObjectID, LoginID, Param )
WITH prerows AS ( SELECT ObjectID, LoginID, Param
FROM devices D
WHERE D.DevNum = '0003'
AND ObjectID IS NULL )
SELECT ObjectID, LoginID, Param FROM prerows;
Пытаться:
INSERT INTO dev_sub( ObjectID, LoginID, Param )
SELECT ObjectID, LoginID, Param
FROM devices D
WHERE D.DevNum = '0003'
AND ObjectID IS NULL
Он не использует предложение WITH в SELECT (также называемое предложением факторинга подзапроса), но с другой стороны, здесь действительно нет необходимости. Oracle, SQL Server и PostgreSQL имеют свои особенности в реализации SQL, и такой вещи, как прозрачная миграция, не существует.
Поделитесь и наслаждайтесь.