我有一个SQL脚本,根据某些条件更新数据库过程或更改表。如果程序或表在运行时不存在,则脚本也应该工作(在这种情况下,应该更新)。什么是SQL Server的SET NOEXEC或NOPARSE的Oracle等价物?
在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
是否有一个等效命令NOEXEC在Oracle中?或者在Oracle中用优雅的方式编写类似的脚本,但不使用“dynamic-sql”。我不想用引号包装代码。
没有,这是不可能的AFAIK。你可以得到会使用'DBMS_SQL最接近的一次。因为你必须使用动态的sql + cursor,但是它对于DDL语句无论如何都不适用(比如你的'alter procedure'语句),因为它也会执行语句,这与你想要的相反。 – sstan
[动态SQL - 检查语法和语义]的可能重复(http://stackoverflow.com/questions/36713444/dynamic-sql-check-syntax-and-semantics) – sstan