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

时间:2015-03-16 14:48:11

标签: oracle stored-procedures plsql

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

select *
from tab
where ...

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

基本上我有一个类表安排表,如下所示:

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

所以我做了一个查询,让所有主题都安排在当前的学术年度,我需要在结果集的每一行使用next_day函数来填充下周安排的实际类的表。 我的想法是: 我得到了需要在下周安排查询的类,将结果保存到某个地方,然后使用next_day通过for循环(因为我需要在课程中发生的实际日期)填充" class_occurence& #34;表。我不确定这是正确的思考方式,可能有一些东西可以在不保存结果的情况下执行此工作,也许是光标,谁知道......

1 个答案:

答案 0 :(得分:1)

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

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

这对我来说非常有用,我需要汇总数据,但只能在很短的时间内完成。

编辑:数据是本地和临时的,临时表总是在那里。 如果你想在程序中将表放在内存中,这是另一种解决方案,但有点复杂。