我们可以在Oracle 10中创建基于函数的主键吗?

我们可以在Oracle 10中创建基于函数的主键吗?,oracle,oracle11g,oracle10g,Oracle,Oracle11g,Oracle10g,在我们的应用程序中,需要根据另一个唯一列(错误代码)的值创建唯一的主键。但我们的应用程序处于地理活动环境中(有几个活动数据库,它们使用另一个程序进行同步) 因此,即使我们对此错误代码字段有唯一的约束,也有可能每个数据库都有一行具有相同错误代码的不同PK。在数据库同步期间,这是一个问题,因为有些子表的PK存储在一个DB中,而其他行包含存储在其他DB中的PK。由于错误代码的唯一约束,同步进程无法将两行移动到每个数据库(这也不是一件好事) 因此,建议使用ERROR_CODE字段的散列作为PK值 我想知

在我们的应用程序中,需要根据另一个唯一列(错误代码)的值创建唯一的主键。但我们的应用程序处于地理活动环境中(有几个活动数据库,它们使用另一个程序进行同步)

因此,即使我们对此错误代码字段有唯一的约束,也有可能每个数据库都有一行具有相同错误代码的不同PK。在数据库同步期间,这是一个问题,因为有些子表的PK存储在一个DB中,而其他行包含存储在其他DB中的PK。由于错误代码的唯一约束,同步进程无法将两行移动到每个数据库(这也不是一件好事)

因此,建议使用ERROR_CODE字段的散列作为PK值

我想知道我们是否可以在oracle中定义基于函数的主键

如果PK字段为“ID”

“ID”应该等于ora_has(错误代码)


可以像在oracle中那样定义主键吗?

在oracle 10中,您不能这样做,但在oracle 11中,您可以这样做。您必须创建虚拟列,此类列也可以用作主键:

ALTER TABLE MY_TABLE ADD (ID NUMBER GENERATED ALWAYS AS (ora_has(ERROR_CODE)) VIRTUAL);
ALTER TABLE MY_TABLE ADD CONSTRAINT t_test_pk PRIMARY KEY (ID) USING INDEX;

我不太明白错误代码上的散列如何帮助您避免在单独的数据库上重复-就其本质而言,一个实例上的散列(x)应该等于另一个实例上的散列(x)。这就是我需要的,一种对错误代码具有相同PK的方法,因此第二次插入同步失败。但错误代码在具有相同PK的两个数据库中。所以还是好的。因此,对于相同的错误代码,其他数据库表也有单个PK。对于相同的错误代码,这些表中不会有具有不同PK(该DB服务器中不存在某些PK)的行。那么散列会给您带来什么?为什么不直接使用错误代码。。。但是你说你已经对错误代码有了一个独特的限制,所以我仍然不知道你到底想要实现什么。你能用两个数据库中的一组数据来更新你的问题吗?