如何在过程中将查询结果保存在临时 table 中

how to save a query result in a temporary table within a procedure

我是 oracle 的新手,所以我提前为这个简单的问题道歉。 所以我有这个程序,我 运行 一个查询,我想保存查询结果以供进一步使用,特别是我想要 运行 一个 for 循环,它将逐行进行我的选择并复制一些另一个 table 中的值。目的是从父 table 开始填充子 table(弱实体)。 为此,让我们想象一下我有一个查询:

select *
from tab
where ...

现在我想用局部范围保存选择,因此生命周期仅限于过程本身(基本上就像 C 函数中的局部变量)。我怎样才能达到这样的结果?

基本上我有一个 class 时间表 table 组成如下:

Schedule
--------------------------------------------------------
subject_code | subject_name | class_starting_date | starting hour | ending hour | day_of_week

所以我进行了查询以获取为当前学年安排的所有科目,我需要在结果集的每一行上使用函数 next_day 来填充 table实际安排在下周的 classes。 我的想法是: 我得到需要在下周安排查询的 classes,将结果保存在某处,然后使用 next_day 通过 for 循环(因为我需要 [=] 中的实际日期24=] 发生 ) 填充 "class_occurence" table。我不确定这是不是正确的思考方式,可能有一些东西可以在不先保存结果的情况下执行这项工作,也许是游标,谁知道...

Global Temporary tables 是一个不错的解决方案。只要您知道要插入的数据的结构(有多少列和什么数据类型),您就可以插入全局临时文件 table。数据只能由执行插入的会话看到。可以使用某些选项删除或提交数据。

CREATE GLOBAL TEMPORARY TABLE my_temp_table (
  column1  NUMBER,
  column2  NUMBER
) ON COMMIT DELETE ROWS;

这对我来说非常有用,因为我需要汇总数据,但只需要很短的时间。

编辑:数据是本地的和临时的,临时 table 总是存在的。 如果您想在过程中将 table 保存在内存中,这是另一种解决方案,但稍微复杂一些。