Oracle
找出長度語義發生變化的地方
我有程式碼來創建不指定長度語義的表:
CREATE TABLE CHAR_TEST ( CHAR_TEST_ID NUMBER(*,0) NOT NULL, FOO VARCHAR2(6) NOT NULL, BAR VARCHAR2(6) NOT NULL, CONSTRAINT CHAR_TEST_PK PRIMARY KEY (CHAR_TEST_ID) ENABLE );
實際程式碼相當大,包含數百個對象。我有兩個版本的程式碼,它們對應於相隔幾年的不同原始碼控製版本。
我在具有相同設置的同一台伺服器上創建了 2 個使用者/模式。然後我在每個各自的架構中執行每個修訂。令我驚訝的是,最新版本得到了意想不到的
CHAR
語義:Name Null Type ------------ -------- ----------- CHAR_TEST_ID NOT NULL NUMBER(38) FOO NOT NULL VARCHAR2(6) BAR NOT NULL VARCHAR2(6)
Name Null Type ------------ -------- ---------------- CHAR_TEST_ID NOT NULL NUMBER(38) FOO NOT NULL VARCHAR2(6 CHAR) BAR NOT NULL VARCHAR2(6 CHAR)
我不知道這些是
CHAR
從哪裡來的!
CREATE TABLE
如果我單獨執行程式碼,我無法重現它- 我一直無法
ALTER TABLE CHAR_TEST
在我的程式碼庫中找到更改鍵或索引以外的任何內容的語句SELECT value FROM V$PARAMETER WHERE NAME LIKE '%nls_length_semantics%';``BYTE
在兩種模式中列印你能建議在哪裡看得更遠嗎?
我忘記了最明顯的事情:會話參數可以更改!
我在最新版本中有這個:
ALTER SESSION SET NLS_LENGTH_SEMANTICS = 'CHAR';
…但不是舊的。我在不同的會話中執行腳本,因此我無法發現值的變化。