Postgresql oracle plsql语句与INSERT组合
在迁移postgresql 9函数的过程中,遇到以下问题: 在Oracle中,您可以仅在复杂的select语句中使用。同时,在postgres(以及MS SQL 2008)中,您可以与一起使用和插入(更新、删除) 例如:Postgresql oracle plsql语句与INSERT组合,postgresql,plsql,sql-insert,with-statement,Postgresql,Plsql,Sql Insert,With Statement,在迁移postgresql 9函数的过程中,遇到以下问题: 在Oracle中,您可以仅在复杂的select语句中使用。同时,在postgres(以及MS SQL 2008)中,您可以与一起使用和插入(更新、删除) 例如: WITH prerows AS ( SELECT ObjectID, LoginID, Param FROM devices D WHERE D.DevNum = '0003' AND ObjectID IS NULL
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关键字”。也许我错过了什么?我是一个甲骨文爱好者,如果我知道它不能与语句和插入命令相结合,我会感到遗憾
致以最诚挚的问候,安东尼请尝试:
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;
尝试:
它在SELECT上没有使用WITH子句(也称为子查询分解子句),但另一方面,这里确实不需要WITH子句。Oracle、SQL Server和PostgreSQL在其SQL实现中都有自己的特点,并且没有透明迁移
分享和享受。谢谢你,伙计!虽然查询与ms/postgresql不同,但它确实有效,而且是一个简单的解决方案@Igor Romanchenko的解决方案更加正确和优雅。无论如何,谢谢你的尝试!
INSERT INTO dev_sub( ObjectID, LoginID, Param )
SELECT ObjectID, LoginID, Param
FROM devices D
WHERE D.DevNum = '0003'
AND ObjectID IS NULL