oracle 表定义,关于Oracle SQL:Oracle SQL-定义表名称以供以后使用?

我想知道在SQL Oracle中是否可以进行一些范围定义(例如在Excel中)。 例如:

[TABLE0] [WHERE / GROUP BY / HAVING / ORDER BY / ...];从[SCHEMA]中定义TABLE1 =选择FIELD1,FIELD2,FIELD3。

DEFINE TABLE2 =从TABLE1中选择字段1,字段2,字段3 [WHERE / GROUP BY / HAVING / ORDER BY / ...];

DEFINE TABLE3 =在[CONDITIONS]上从TABLE2左联接TABLE1中选择FIELD1,FIELD2,FIELD3;

SELECT * FROM TABLE3;

非常感谢。

您是否考虑过公用表表达式(WITH子句)?

@Steve,我仅了解以下逻辑:"使用TABLE1 AS [表结构],TABLE2 AS [表结构] SELECT * FROM TABLE1 JOIN TABLE2;" & 而已。 我不确定这个子句后面是否还有更复杂的逻辑...

仅用您发布的抽象数据来给出有意义的示例有点困难,但是附带条款可以包含任何类型的选择查询(包括对group-by和where子句的使用)。 逻辑可以像您需要的那样复杂-您还可以链接表引用,因此一个CTE的内容可以引用一个较早的版本(即,在您的示例中TABLE2可以从TABLE1中进行选择或加入) 在附带条款中定义)。

根据您的示例,听起来您想创建视图:

CREATE VIEW TABLE1 AS

SELECT FIELD1, FIELD2, FIELD3

FROM [SCHEMA].[TABLE0][WHERE/GROUP BY/HAVING/...];

CREATE VIEW TABLE2 AS

SELECT FIELD1, FIELD2, FIELD3

FROM TABLE1 [WHERE/GROUP BY/HAVING/...];

CREATE VIEW TABLE3 AS

SELECT FIELD1, FIELD2, FIELD3

FROM TABLE2

LEFT JOIN TABLE1 ON [CONDITIONS];

SELECT * FROM TABLE3;

但您不会(我希望)实际调用视图table1,table2或table3。命名视图更常见,以便您知道它们是视图。例如TABLE0_V1,TABLE0_V2,TABLE0_V3和从不在视图定义中包括ORDER BY

@Used:...就像我不会调用任何一个表一样。但就您的观点而言,我知道通常会看到以某种方式添加前缀或后缀的视图来标识它们。就个人而言,我认为没有必要。但我绝对同意您不希望在视图定义中使用ORDER BY。编辑。

很高兴我们同意不使用视图中的顺序。 IMHO的命名约定也很重要,尤其是对于那些不熟悉数据模型的人,但是有关命名约定的辩论通常是徒劳的:)

@Used_By_Already-为什么"从不在视图定义中包括ORDER BY"?怎么了

显然,这是不相关的(根据AskTom,在这里:asktom.oracle.com/pls/apex/),因为(引用)"在优化查询之前,它经历了一个称为"转换"的阶段,在该阶段我们(Oracle)寻找重新编写查询的方式,这可能会在不改变SQL目的的情况下为优化提供更多选择。因此,如果优化程序发现未使用ORDER BY视图(或被SELECT自己的ORDER BY覆盖),则查询将被转换,而ORDER BY被忽略。

我认为重要的是不要以TABLE开始视图名称;)

@littlefoot尽管优化器有可能忽略未使用的订单,但大多数情况下,优化器只是不这样做,因此在解释计划中可以看到无关订单的成本。根本没有很好的理由来定义视图中的顺序。排序应仅留给最终查询。

嗨@sstan,非常感谢,这可能会有所帮助。 ||只有一个问题:您知道只能使用" SELECT"特权才能完成的任何其他方式吗?我要修改的数据库是生产模式,因此除视图外我没有其他功能。

如果您仅具有SELECT特权,则最好的办法是使用WITH子句,该子句类似于定义视图,但只能在定义了WITH子句的同一查询中重用。

结束这个问题。 从其中一个注释(Steve)中,我需要一个WITH子句,因为我没有DDL特权。

谢谢,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值