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

Posted

技术标签:

【中文标题】H2:如何从 Oracle 视图创建链接表?【英文标题】:H2: How to create a linked table from Oracle view? 【发布时间】:2014-01-09 03:31:02 【问题描述】:

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

【问题讨论】:

错误很直接。这意味着视图不存在或用户sa 没有授予(特权)它。尝试将此视图的授权添加到用户 sa 并让我们知道 其实不是权限问题。我发现如果视图是物化视图也可以。请查看更新。 【参考方案1】:

嗯,关于链接表的 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)' );

【讨论】:

是的,我们需要把视图放在括号里,比如'(VIEW_TEST)',这样就可以了。谢谢你的回答。

以上是关于H2:如何从 Oracle 视图创建链接表?的主要内容,如果未能解决你的问题,请参考以下文章

带有查询的链接表在列名中包含“/”

MS Access:在设计指南视图中创建链接表不显示要链接的表?

访问错误创建链接的 Oracle 表

访问表单 - 如何从“此视图可用的字段”中删除额外的链接表

线性表练习之Example038-编写一个函数将链表 h2 链接到链表 h1 之后,要求链接后的链表仍然保持循环链表形式

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步