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:在设计指南视图中创建链接表不显示要链接的表?
线性表练习之Example038-编写一个函数将链表 h2 链接到链表 h1 之后,要求链接后的链表仍然保持循环链表形式