我有两个不同的表,它们包含两组不同的报表数据。然而我想要一个UNION ALL视图,这样我就可以将公共列一起显示出来。我第一次尝试制作一个单独的列:导入Oracle UNION ALL查看到实体框架EDMX
SELECT NVL(ROW_NUMBER() OVER (ORDER BY REPORT_PERIOD DESC, REPORT_ID DESC),0) ROW_ID,u.REPORT_ID,u."REPORT_PERIOD",u."EXCEL_DOC",u."XML_DOC",u."STATUS",u."CREATED_BY",u."CREATED_ON",u."MODIFIED_BY",u."MODIFIED_ON"
FROM
(
SELECT ('DR' || TO_CHAR(DISTRIBUTION_REPORT_ID)) AS REPORT_ID,
REPORT_PERIOD,
EXCEL_DOC,
XML_DOC,
STATUS,
CREATED_BY,
CREATED_ON,
MODIFIED_BY,
MODIFIED_ON
FROM DISTRIBUTION_REPORT
UNION ALL
SELECT ('TR' || TO_CHAR(TREATMENT_REPORT_ID)) AS REPORT_ID,
REPORT_PERIOD,
EXCEL_DOC,
XML_DOC,
STATUS,
CREATED_BY,
CREATED_ON,
MODIFIED_BY,
MODIFIED_ON
FROM TREATMENT_REPORT
) u
的Visual Studio不会让我补充一点,因为它无法推断主键。于是我增加了一个:
ALTER VIEW VW_ALL_REPORT ADD CONSTRAINT VW_ALL_REPORT_PK PRIMARY KEY (ROW_ID) DISABLE
然后我得到了一个错误,指出关键的所有部分必须是非空的。然后我尝试添加一个rownumber()列并尝试相同的事情,并得到相同的确切错误。
在每种情况下,Oracle似乎认为关键字列是可以空的,即使它不应该是半智能的。所以它将这种不准确传递给Visual Studio。
如果您双击视图,您将获得每列的属性。请注意“可空=是”
我知道我可以添加一个名为“ALL_REPORT”第三个表,并可能只是其他两个表中添加行的每一行。但是,这看起来像是浪费资源。有任何想法吗?
我使用VS 2013,Oracle 11g和VB.NET。
我通过创建临时表,然后在导入到EF之前更改我的视图,然后将其切换回来,从而跟踪此人的解决方法。但是,这个解决方法的男孩很臭:https://community.oracle.com/thread/2256196?start=0&tstart=0 –
我也试过用这个合并版本替换我的union的所有查询的方法。 Oracle仍然报告该列是可空的。 Uggh! https://stackoverflow.com/questions/22531774/oracle-sql-alternative-to-the-union-all-statement –
更新的问题添加row_number(),仍然显示为可空。 –