我有一个SQL脚本,根据某些条件更新db过程或更改表。如果在运行时过程或表不存在,则脚本也应该能够工作(在这种情况下不应更新任何内容)。
在MSSQL中,我可以通过NOEXEC实现这一点,如下所示:
IF NOT EXISTS (select * from sysobjects where name ='MY_PROC1')
SET NOEXEC ON
GO
--the following code will not be executed in the server
ALTER PROCEDURE [MY_PROC1]
(
code that alter the procedure
)
GO
SET NOEXEC OFF
GO
在Oracle中是否有类似于NOEXEC的等效命令?或者是否有一种优雅的方式来编写类似的脚本,但是不使用“动态SQL”?我不想用引号包装代码。
dbms_sql.parse()
,但您会讨厌它,因为您需要使用动态SQL和游标。但是它实际上也不适用于DDL语句(例如您的alter procedure
语句),因为它将执行该语句,这与您想要的相反。 - sstan