使用另一个表中的值在Oracle中创建枚举器字段

时间:2013-05-22 08:38:43

标签: oracle constraints

问候研究员,

我的应用程序有很多表。每个表都有0 / n个枚举器。一切都很好,气泡,然后突然我的客户端现在想要将他的数据移动到Oracle(他们之前有一些本机数据库。)现在我们已经设法为我们拥有的表创建SQL但是对于普查员。

我向主互联网做了牺牲(这基本上意味着我没有看FB好像1-2个小时)并且发现对于oracle我们可以使用:

Column_Name Data_type(size)(Check In(<Possible Values>)).

仔细观察我发现如果我们为枚举器创建表并在插入值时将这些表用作约束会更好。像

这样的东西

表枚举器有2个字段ID和枚举值

表My_Table有一个Name列,它只接受枚举器表中的值。

理由: 1.大多数调查员在不同的表格中重复出现。 2.如果客户端要更新任何枚举器表,我们不希望它们返回并更改所有其他表。

我也在考虑其他解决方案。但是,如果你能引导我的旅程,我会感激你的智者。

找到null问题的解决方案:D ...现在我cna插入一个空字符串(或)表中的任何一个值:

GOT THE SOLUTION :D

混合它们(即)CHECK IN以及Constraint:D

CREATE TABLE "MY_TABLE1"
("ID" number(11) not null,
"STATUS" varchar2(12) Check(STATUS IN('')),  << -- Did the trick,
FOREIGN KEY("STATUS") REFERENCES MY_ENUM3("VALUES"),
primary key ("ID"));

1 个答案:

答案 0 :(得分:1)

您可以使用引用约束,如下例所示:

SQL> create table enumerator1( id number constraint enum_pk primary key, name varchar2(100) );

Table created.

SQL> create table t2( id number, enum1_id number constraint enum1_ref references enumerator1 );

Table created.

SQL> insert into enumerator1 values ( 1, 'LABEL 1' );

1 row created.

SQL> insert into t2 values ( 200, 2 );  <== DOES NOT EXIST (YET)
insert into t2 values ( 200, 2 )
*
ERROR at line 1:
ORA-02291: integrity constraint (TEST1.ENUM1_REF) violated - parent key not found


SQL> insert into enumerator1 values( 2, 'LABEL 2' );

1 row created.

SQL> insert into t2 values ( 200, 2 );   <== NOW IT'S OK

1 row created.