【发布时间】:2013-04-11 14:57:47
【问题描述】:
我在 Oracle 中有一张表。此表包括:EMPLOYEE_ID(NUMBER,Nullable,但 NULL 数为 0)和 EMPLOYEE_NUMBER(VARCHAR2,Nullable,但 NULL 数为 0)。
现在我在这个表上创建一个视图:
CREATE OR REPLACE FORCE VIEW APPS.XXKE_L2E_EMPLOYEE
(
PERSON_ID,
EMPLOYEE_NUMBER,
...
)
AS
SELECT EMPLOYEE_ID,
EMPLOYEE_NUMBER,
...
FROM xxke.xxke_employees e
INNER JOIN xxke.xxke_organizations o ON e.organization_id = o.organization_id
INNER JOIN xxke.xxke_operating_units ou ON e.org_id = ou.org_id;
ALTER VIEW APPS.XXKE_L2E_EMPLOYEE
ADD CONSTRAINT XXKE_L2E_EMPLOYEE_V_PK
PRIMARY KEY(PERSON_ID) DISABLE;
在那个视图中 PERSON_ID 怎么可能变成 Nullable(即使使用 NVL 技巧),但 EMPLOYEE_NUMBER NOT Nullable
问题: 如何让 Oracle 以某种方式创建视图,使 PERSON_ID 列在视图中变为 NOT Nullable?或者我怎样才能让我的 WCF oData 服务查询这个视图。目前在更新 edmx 文件后,我得到以下信息:
错误:Oracle.ssdl(227,6):错误 0075:关键部分:XXKE_L2E_EMPLOYEE 类型的“PERSON_ID”无效。密钥的所有部分都必须不可为空。
【问题讨论】:
-
可能是因为您在其中一列上使用 NVL 而不是其他列?
-
你已经让你的愤怒妨碍了提供一个明确的问题。请解释实际发生的情况以及与您希望发生的情况有何不同。
-
@MichalB.:等等,是 SQL Server 还是 EF 告诉您这些列可以为空?检查视图在 SQL management Studio 中的情况
-
可能相关:stackoverflow.com/q/11097839/266304(也交叉发布为dba.stackexchange.com/q/19484/847)。您是说您需要视图的元数据以将列显示为
not null,以便 EF 受益,就像那个问题一样? -
坦率地说,我们也无法理解“为什么 EMPLOYEE_NUMBER 最终会变成 NON NULLABLE”。 Oracle 视图从底层表继承它们的非空约束。因此,如果表中的源列不是 NULL,视图应该只显示该列的 NOT NULL。
标签: sql oracle oracle11g nullable sql-view