2010-03-11 40 views
2

如何檢測當前的SCAN狀態並在更改後恢復它?提示變量值時恢復掃描狀態

從腳本中的問題exerpt:

SET SCAN OFF 
SET ECHO ON 
SET SQLBLANKLINES ON 

SET SCAN ON 
UPDATE TABLE_NAME SET CREATED_BY = &&created_by; 
SET SCAN OFF 

的問題是,如果腳本不具有第一行(SET SCAN OFF),則提示用戶的代碼不應該打開SCAN狀態之後關閉。僞代碼解決方案:

-- The next line might not exist, or be "SET SCAN ON". 
SET SCAN OFF 
SET ECHO ON 
SET SQLBLANKLINES ON 

-- Remember if the scanning was on or off. 
PUSH SCAN STATE 
SET SCAN ON 
UPDATE TABLE_NAME SET CREATED_BY = &&created_by; 

-- Revert scanning to its former state. 
POP SCAN STATE 

PUSH SCAN STATE記得狀態,如果代碼被刪除的第一行改變時,腳本的其餘部分仍然按預期工作,由於corresonding POP SCAN STATE

+0

你可以'頂部SHOW SCAN'並在必要時事後手動重置。 – 2010-03-12 03:20:41

+0

@Jeffrey:我正在尋找一個自動化解決方案。 – 2010-03-12 18:06:24

+0

我收集了這些,這就是爲什麼我發表了評論,但沒有回答 - 我懷疑可能沒有解決方案。 – 2010-03-14 00:11:47

回答

1

的SQL STORE命令應該做到這一點,不幸的是它似乎並沒有保存SCAN狀態(SQL加9.2.0.1.0)。我將與其它設置(TIMING)證明:

SQL> show timing 
timing OFF 
SQL> -- save parameters into an os file 
SQL> store set param.sql create 
Created file param.sql 
SQL> -- run script 
SQL> SET TIMING ON 
SQL> show timing 
timing ON 
SQL> -- reset state 
SQL> @param.sql 
SQL> show timing 
timing OFF 
+0

謝謝你。好主意,併爲我提供了一個探索領域。太糟糕了,它實際上並沒有解決問題。 – 2010-03-12 23:54:49