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 管道