我有代码来创建不指定长度语义的表:
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
在两种模式中打印
你能建议在哪里进一步看吗?
我忘记了最明显的事情:会话参数可以更改!
我在最新版本中有这个:
...但不是旧的。我在不同的会话中运行脚本,因此无法发现值的变化。