H2:如何从Oracle视图创建链接表?

时间:2014-01-09 03:31:02

标签: oracle h2

如何从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)');

1 个答案:

答案 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)' );