gpt4 book ai didi

oracle - 我们如何在 pl/sql block 中使用 oracle 私有(private)临时表?

转载 作者:行者123 更新时间:2023-12-04 15:38:44 24 4
gpt4 key购买 nike

我看到了的概念临时表在 oracle 中与 SQL Server 等其他数据库有很大不同。在Oracle中,我们有一个概念全局临时表我们只创建一次,在每个 session 中我们用其他数据库中不同的数据填充它。

在18c中,oracle引入了的概念。私有(private)临时表 它指出,成功使用后,可以像在其他数据库中一样删除表。但是我们如何在 PL/SQL 块中使用它呢?

我尝试使用动态 SQL 使用它 - EXECUTE IMMEDIATE .但它给我表必须声明错误。我在这里做什么?

最佳答案

But how do we use it in a PL/SQL block?



如果您的意思是,我们如何在 PL/SQL 程序(过程或函数)中使用私有(private)临时表,答案很简单:我们不能。 PL/SQL 程序需要先编译后才能调用。这意味着程序中引用的任何表都必须存在 在编译时 .私有(private)临时表不会改变这一点。

私有(private)临时表旨在用于即席 SQL 工作。它允许我们创建一个数据结构,我们可以在 session 期间在 SQL 语句中使用它,让我们自己的生活更轻松。

例如,假设我有一个庞大的销售数据表——低级交易——我的任务是调查每月的趋势。所以我只需要按月的总销售额。不幸的是,没有提供此摘要的物化 View 。我不想在我的选择语句中包含聚合查询。在以前的版本中,我将不得不创建一个永久表(并且必须记住之后将其删除),但在 18c 中,我可以使用私有(private)临时表来为 session 暂存我的摘要。
create private temporary table ora$ptt_sales_summary (
sales_month date
, total_value number )
/

insert into ora$ptt_sales_summary
select trunc(sales_date, 'MM')
, sum (qty*price)
from massive_sales_table
group by trunc(sales_date, 'MM')
/

select *
from ora$ptt_sales_summary
order by sales_month
/

显然,我们可以在 session 中编写匿名 PL/SQL 块,但让我们继续假设这不是您所需要的。那么永久PL/SQL 程序中的私有(private)临时表的等价物是什么?与现在几个版本相同: a PL/SQL collectiona SQL nested table type .

关于oracle - 我们如何在 pl/sql block 中使用 oracle 私有(private)临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com