數據庫是Oracle 11g2 Express。我執行alter system set NLS_DATE_FORMAT = "DD/MM/RRRR" SCOPE=SPFILE;
,然後我做了一個查詢:select hire_date from employees;
但顯示的格式仍然是DD/MM/RR!那麼如何永久更改nls_date_format
?執行alter system後日期格式不會更改
回答
您可以在不同層次
以實例/服務器的初始化參數設置NLS參數。
SQL>alter system set V$NLS_PARAMETER = 'XXX' scope = both;
作爲客戶端上的環境變量。
% setenv NLS_SORT FRENCH
作爲ALTER SESSION參數。
SQL> ALTER SESSION SET V$NLS_PARAMETER = = 'XXX'
任何設置都將覆蓋較高級別上的設置。因此,將其設置爲服務器端並不能保證所有連接的客戶端都使用該設置。
如果您想確保爲每個連接的客戶端設置它,請使用登錄觸發器。即使此時用戶可以明確地覆蓋「默認」設置
LOGON TRIGGER在會話級別設置這些參數。
CREATE OR REPLACE TRIGGER sys.schema_nls_session_settings AFTER LOGON ON BOB.SCHEMA
BEGIN
execute immediate 'alter session set NLS_LANGUAGE=''ENGLISH''';
execute immediate 'alter session set NLS_TERRITORY=''UNITED KINGDOM''';
execute immediate 'alter session set NLS_CURRENCY=''£''';
execute immediate 'alter session set NLS_ISO_CURRENCY=''UNITED KINGDOM''';
END;
/
像SQL Developer這樣的工具在其偏好中也有一個日期格式。它僅用於在SQL工作表中顯示結果。但它忽略了任何系統和會話設置。 – Codo
好的,我重新啓動數據庫,然後設置格式!
SCOPE = SPFILE,僅在靜態參數文件中進行更改,但不在當前實例中進行更改。當您重新啓動數據庫時,實例將使用來自SPFILE的新值構建。
SCOPE = MEMORY,在當前實例中進行更改,但不在靜態參數文件中。當您重新啓動數據庫時,實例將使用舊值構建。所以你失去了改變。
SCOPE = BOTH,在當前實例和靜態參數文件中進行更改。
無論何時重新啓動數據庫,都會使用靜態參數文件中的值構建實例。在你的情況下,當你重新啓動時,實例是使用更改後的值構建的。所以它重新啓動數據庫後正在工作。如果您使用了SCOTE的BOTH值,那麼您不必重新啓動數據庫。
希望這會有所幫助。
如果他們使用了'SCOPE = BOTH'這個值,他們會得到ORA-02096;您不能在正在運行的實例中修改此參數。 –
- 1. 更改日期格式與alter table
- 2. ALTER SYSTEM未在jruby中執行
- 3. PHP - 更改日期格式
- 4. 更改新日期格式
- 5. 更改日期格式Trello.NET
- 6. copyValuesToRange更改日期格式
- 7. 更改日期格式
- 8. 更改會話以在MyBatis中設置日期格式
- 9. 更改日期格式
- 10. 更改日期格式(Javascript)
- 11. 更改日期格式
- 12. PHP - 日期更改格式
- 13. 更改日期格式
- 14. 更改日期格式
- 15. 更改日期格式
- 16. 更改日期格式
- 17. 更改格式日期MySql
- 18. 要更改日期格式
- 19. 更改日期格式
- 20. 更改日期格式
- 21. 更改日期格式 「」
- 22. 更改日期格式YYYYMMDD
- 23. 更改日期格式C
- 24. 更改日期格式
- 25. 更改日期格式
- 26. 更改日期格式
- 27. Dygraphs更改日期格式
- 28. 更改日期格式
- 29. 更改日期格式
- 30. 更改日期格式4
你用什麼工具顯示你的數據? – Codo
你認爲'SCOPE = SPFILE' [手段](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#SQLRF53147)?你真的想在系統級別改變它,而這通常是被忽略的,而不是在會話/客戶端級別嗎? –