我試圖創建一個可以部署在多個數據庫上的發佈腳本,但是可以在稍後的日期將數據合併到一起。處理這種情況的明顯方法是在後續部署中將生產數據的序列號設置得足夠高以防止衝突。動態地爲Oracle序列設置「Start With」值
問題出現在發佈腳本中,該腳本將接受環境編號並適當設置序列的「Start With」值。理想情況下,我想用這樣的:
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
CREATE SEQUENCE seq1 START WITH &EnvironNum*100000;
--[more scripting]
這不起作用,因爲你無法評估DDL數字表達式。
另一種選擇是使用動態SQL通過PL/SQL創建序列。
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
EXEC execute immediate 'CREATE SEQUENCE seq1 START WITH ' || &EnvironNum*100000;
--[more scripting]
但是,我寧願避免這種解決方案,因爲我通常會盡量避免在PL/SQL中發出DDL。
最後,我想出的第三個選項只是將Start With值接受爲替代變量,而不是環境編號。
有沒有人有更好的想法如何去做這件事?
很好的答案。這正是我所期待的。 – Allan 2010-05-11 16:13:58
+1 - 按規定解決問題 – dpbradley 2010-05-11 16:39:14
+1簡單,優雅,無需過程。 – iamnotmaynard 2014-01-09 18:04:00