我有一個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