Oracle临时表如何在这样的存储过程中正常工作?

时间:2010-08-11 17:16:33

标签: oracle temp-tables

假设我在存储过程中使用以下Oracle代码:

CREATE GLOBAL TEMPORARY TABLE temp_table (
    field1 NUMBER,
    field2 NUMBER
)
ON COMMIT DELETE ROWS

可以在任何单个时刻由不同用户同时调用该特定存储过程。据我了解,临时表中用户可见的数据对他或她来说是私有的,这些行在COMMIT上被删除。

但是,以下如何处理这个问题:

  1. 调用存储过程调用每次上面的CREATE语句是否安全?这会导致错误导致已经存在“可能”由不同用户(/会话)创建的临时表吗?或者这样可以,因为服务器无论如何都会私下对待它们?

  2. ON COMMIT DELETE ROWS究竟发生了什么?我假设这只删除了特定用户会话的特定行,其他会话的数据没有受到伤害,是吗?

  3. 任何帮助将不胜感激。 :)

2 个答案:

答案 0 :(得分:5)

  

Q1:打电话是安全的   每个单独的CREATE语句   调用存储过程的时间?

创建全局临时表(GTT)的主要原因是创建一次(不在内部过程中)并将其用作会话的私有表。如果表已经存在,它将抛出错误。

  

Q2:ON COMMIT DELETE ROWS究竟发生了什么?

是。提交后,数据将被删除。这仅适用于您操作的会话。

检查creating GTT及其use

答案 1 :(得分:0)

  1. 我只是把桌子留在那里。放弃并重新创建它没有任何意义。如你所说,它会导致问题。