【问题标题】:H2: How to create a linked table from Oracle view?H2:如何从 Oracle 视图创建链接表?
【发布时间】: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 并让我们知道
  • 其实不是权限问题。我发现如果视图是物化视图也可以。请查看更新。

标签: oracle h2


【解决方案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)',这样就可以了。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2014-04-25
  • 2020-06-30
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多