Database Oracle数据库:具有空值的索引组织表(在多列主键中)
当一列是多列主键的一部分时,如何将该列设置为“”(空字符串,在Oracle中相当于NULL)?这就是动机Database Oracle数据库:具有空值的索引组织表(在多列主键中),database,oracle,null,indexing,primary-key,Database,Oracle,Null,Indexing,Primary Key,当一列是多列主键的一部分时,如何将该列设置为“”(空字符串,在Oracle中相当于NULL)?这就是动机 CREATE TABLE entities ( column1 VARCHAR2(10) , column2 VARCHAR2(10) , body VARCHAR2(4000) , CONSTRAINT pk_entities -- can't do this, because sometimes PRIMARY KEY ( column1, co
CREATE TABLE entities (
column1 VARCHAR2(10)
, column2 VARCHAR2(10)
, body VARCHAR2(4000)
, CONSTRAINT pk_entities -- can't do this, because sometimes
PRIMARY KEY ( column1, column2 ) -- col2 is the empty string (NULL).
) ORGANIZATION INDEX ...
通常,我会使用一个“真正的”主键,比如一个无意义的顺序id(请参阅),然后在我的数据列上设置一个唯一的约束,就像这样
CREATE TABLE entities (
, id NUMBER PRIMARY KEY
, column1 VARCHAR2(10)
, column2 VARCHAR2(10)
, body VARCHAR2(4000)
, CONSTRAINT unq_entities
UNIQUE ( column1, column2 )
) ORGANIZATION INDEX ...
然而,这是一个大的索引组织表(IOT),因此主键必须位于数据列上(在IOT中,数据就是索引),否则。。。我该怎么办
谢谢!♥ 将空字符串替换为伪字符串,稍后再检查它。。。但这取决于表的使用方式。不幸的是,这是Oracle特有的“功能”。与其他SQL DBMS不同,它不支持零长度字符串值,并坚持将其转换为null 您可以创建另一列作为标志来表示长度为零的字符串,然后将空格存储在列本身的位置。不过,我认为没有一个完美的解决办法。Oracle没有修复这个奇怪的限制,这有点令人惊讶,特别是考虑到他们在其他方面做出了巨大的改进,以符合SQL标准。为什么需要将表作为一个IOT?在第1列、第2列和堆表上创建一个唯一的索引对于数据检索来说可能同样有效
IOT(类似于具有聚集索引的表)是例外,而不是Oracle中的标准。无法做到这一点;
列2中的值可以是任何值。