爲pl/sql包提供參數(配置)的首選方式是什麼? 擁有不同的環境(test,qa,prd)時,需要指定應爲每個環境適當設置的值。一旦包裝被安裝,這些值不會改變。 我正在尋找一種方法,最好讓每個環境都有相同的代碼。Oracle pl/sql提供環境特定參數的首選方式
回答
您可以使用配置表與鍵值對。爲不同的環境插入不同的值,並將代碼中所需的這些值加載到PL/SQL變量中。
+1,但請記住使用多個值列,每種類型一個。大多數人通過將所有內容保存爲字符串來實現這一點,這會在稍後導致問題 –
OPTION 1
使用sys_context
或類似的東西。這將允許您在SQL中使用這些參數,同時不會出現性能損失。例如。看到this article得到的功能類似:
SELECT sys_context('sample_ctx','email') FROM dual
如果您有logon
觸發結合起來,你應該能夠將其設置在每一個新的會話。
OPTION 2
另一種選擇是使用這些值的全局陣列中的一些封裝的規格。該類型的數組應該是這樣的
TYPE population_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(30);
這應該在封裝體(僞代碼)內進行初始化:
PACKAGE BODY ...
... -- functions etc
BEGIN
-- initialization of your array
END PACKAGE BODY;
然後你可以使用它作爲my_params.my_array(「my_parameter 「)並直接訪問該值。
選項#2的優點是它存儲在RAM中,並且通過內置陣列閱讀器功能獲得該值。這也不需要任何特定的權限(這比方案1更好),並且在任何時候你不想讀取參數都不會讀取表格。如果你仍然喜歡將參數存儲在某個表中,那麼當會話開始時,仍然可以讀取一次(這將在程序包初始化期間自動完成)。
缺點是在SQL處理中使用數組可能會比較困難。
如果要修改會話級別參數,則可以在PL/SQL代碼中使用IF-ELSE
構造。然後,您需要使用EXECUTE IMMEDIATE執行ALTER SESSION報表。
查找當前數據庫名稱。你可以查詢名從* V $數據庫**:
SQL> SELECT name FROM v$database;
NAME
---------
ORCL
你可以存儲在這一個局部變量,然後有一個IF-ELSE
邏輯在運行時修改會話參數。
例如,
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
11-MAY-15
SQL> set serveroutput on
SQL> DECLARE
2 v_db_name VARCHAR2(20);
3 BEGIN
4 SELECT NAME INTO v_db_name FROM v$database;
5 DBMS_OUTPUT.PUT_LINE('Current database is : '||V_DB_NAME);
6 IF v_db_name = 'ORCL' THEN
7 EXECUTE IMMEDIATE q'[alter session set nls_date_format='MM/DD/YYYY HH24:MI:SS']';
8 ELSIF v_db_name = 'QA' THEN
9 EXECUTE IMMEDIATE q'[alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS']';
10 ELSE
11 EXECUTE IMMEDIATE q'[alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS']';
12 END IF;
13 END;
14/
Current database is : ORCL
PL/SQL procedure successfully completed.
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
-------------------
05/11/2015 14:24:26
所以,你可以一個IF-ELSE
塊添加到您現有的PL/SQL代碼,並在所有的環境使用相同的代碼:
IF v_db_name = 'param1' THEN
EXECUTE IMMEDIATE q'[alter session set parameter='value1']';
ELSIF v_db_name = 'param2' THEN
EXECUTE IMMEDIATE q'[alter session set parameter='value2']';
ELSE
EXECUTE IMMEDIATE q'[alter session set parameter='value3']';
END IF;
要在所有軟件包中全局使用參數值,您可以查看global context variable。
- 1. Microsoft提供的Oracle和位置參數
- 2. 自定義事件提供的事件參數的首選實踐是什麼?
- 3. grunt環境特定選項的任務
- 4. oracle plsql動態循環
- 5. PLSQL提取procudures oracle 9i
- 6. 用PDO :: FETCH_ASSOC提供的foreach循環,提供的參數無效
- 7. oracle plsql參數默認爲空
- 8. Oracle PLSQL - 只提交數據庫鏈接
- 9. 向數據庫提供可定製類別的首選方法是什麼?
- 10. 從該方法提供進度信息的首選方法?
- 11. 選擇特定環境使用Apache Ant
- 12. Oracle/PLSQL。選擇兩個表
- 13. 環境的特定全局配置參數運行@雲
- 14. 特定於環境的圖像(請提供TFS或Web配置建議)
- 15. 使用完整的語言環境首選項列表從Zend Framework中提取用戶定義的語言環境的最佳方式是什麼?
- 16. 用戶提供的語言環境中的django格式日期
- 17. 從Tomcat環境中提供文件
- 18. Symfony2:在開發環境中提供test.client
- 19. 以編程方式更新語言環境特定文件
- 20. PLSQL循環提交更新
- 21. 爲特定的foreach禁用「無效參數提供」警告
- 22. 從參數分配集合的首選方式是什麼?
- 23. Laravel4種子特定環境
- 24. 與特定語言環境
- 25. Terraform環境特定變量
- 26. 特定日期的WordPress供稿參數
- 27. 匕首2俯瞰提供方法
- 28. 爲C#webmethod提供可選參數的最佳方法
- 29. 在Polymer應用程序中設置階段特定環境的首選方法是什麼?
- 30. 在多個生產環境中更新數據庫模式的首選方式是什麼
什麼樣的參數?會話級別?然後你可以使用'IF-ELSE'構造。 –