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

Ric*_*gan 2 oracle temp-tables

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

CREATE GLOBAL TEMPORARY TABLE temp_table (
    field1 NUMBER,
    field2 NUMBER
)
ON COMMIT DELETE ROWS
Run Code Online (Sandbox Code Playgroud)

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

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

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

  2. ON COMMIT DELETE ROWS究竟发生了什么?我假设这只删除了特定用户会话的特定行,让其他会话的数据保持不受干扰,对吗?

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

Gur*_*uru 5

Q1:每次调用存储过程时调用CREATE语句是否安全?

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

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

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

检查创建 GTT及其使用.