Oracle SQL 创建或替换带有/不带有列名的视图

Posted

技术标签:

【中文标题】Oracle SQL 创建或替换带有/不带有列名的视图【英文标题】:Oracle SQL create or replace view with/without column names 【发布时间】:2021-04-27 21:36:54 【问题描述】:

我有一个关于 Oracle 视图的问题。假设我们创建了一个视图:

Create View V1(col1, col3, col2) as
(
  select a as col1,
         b as col2,
         c as col3
   from x.y
)

让我们说,然后您发现您现在选择了错误,因为您将其选择为:

select col1, col2, col3 
from V1 
--Expecting col1, col2, col3
--but gets  col1, col3, col2

现在您创建或替换不带标题名称

Create or replace force editionable View V1 as
(
  select a as col1,
         b as col2,
         c as col3
   from x.y
)

现在您仍然遇到同样的问题。因此我的问题是: 当您创建定义标题的视图时,Oracle 是否将标题名称的位置存储在某处并且需要在选择正确通过之前重新加载?

【问题讨论】:

【参考方案1】:

不幸的是,Oracle 只检查查询文本,因为它没有被更改,Oracle 并没有真正重建它。

稍微修改一下文字,一切都会好的:


SQL> create or replace view v1(a,c,b) as select 'a' a,'b' b,'c' c from dual;

View created.

SQL> select * from v1;

A C B
- - -
a b c

SQL> create or replace view v1(a,b,c) as select 'a' a,'b' b,'c' c from dual;

View created.

SQL> select * from v1;

A C B
- - -
a b c

-- I've added just one extra space after dual:
SQL> create or replace view v1(a,b,c) as select 'a' a,'b' b,'c' c from dual ;

View created.

SQL> select * from v1;

A B C
- - -
a b c

PS。此错误仅存在于 Oracle 19+ 上。我在 11.2.0.4 和 18.5 上检查过,一切都很好。最好注册SR。如果你想让我注册,请告诉我

【讨论】:

似乎成功了。然而,我也删除了“FORCE”,但我怀疑它对解决我的问题几乎没有任何作用。但是在选择中添加一个空的新行似乎可以解决问题。

以上是关于Oracle SQL 创建或替换带有/不带有列名的视图的主要内容,如果未能解决你的问题,请参考以下文章

在oracle SQL developer中从查询列名中查找表

PL/SQL 能否可靠地转换为 Pig Latin 或带有 Pig Latin 和 Hive 的 Oozie 管道

带有空行和多行注释的 Oracle SQL*Plus 错误

在SQL窗口里,不是在语言的程序中,怎么调用oracle带有out型游标参数的过程.

sql 移除数据内容的空格/或替换sql内容

带有服务的 SQL Server 的模拟/外观?