如何从Oracle视图创建链接表?我可以通过下面的代码从Oracle表创建链接表
--TEST is a table in Oracle
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM TEST)');
但是当我将表TEST
更改为VIEW_TEST
时,如下所示
--VIEW_TEST is an view in Oracle
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM VIEW_TEST)');
异常将抛出: ORA-00942:表或视图不存在。
那么如何从Oracle视图创建链接表?
更新
如果我将视图更改为物化视图,它也可以工作。
--MV_TEST is a materialized view in Oracle
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM MV_TEST)');
答案 0 :(得分:1)
嗯,关于Linked表的H2文档对于视图不够清楚。我猜测,因为它与物化视图一起使用,它只适用于物理对象。 oracle上的视图不是物理对象,它是数据库查询的链接资源。
正如文档所述,LINKED TABLE无效的案例
不支持以下内容,因为它们可能会导致死锁:如果另一个数据库在同一服务器中打开,则使用服务器模式创建到同一数据库的链接表,并创建链接表到另一个数据库(使用而不是嵌入式模式。
链接表也不支持H2中不支持的数据类型,例如,如果值超出有符号类型的范围,则为无符号数据类型。在这种情况下,需要将列强制转换为支持的类型。
因此,目前尚不清楚是否接受观点。
您可以做的最好的事情是尝试FORCE
命令作为 documentation states ,即使该表不存在,它也会创建链接表。所以它会像:
CREATE FORCE LINKED
TABLE LINK ( '',
'jdbc:oracle:thin:@url:1521:se',
'sa',
'sa',
'(SELECT * FROM VIEW_TEST)' );