我发现oracle中临时表的概念与SQL Server等其他数据库有很大不同。在Oracle中,我们有一个全局临时表的概念,我们只创建它一次,并且在每个会话中我们用与其他数据库中不同的数据填充它。
在 18c 中,oracle 引入了私有临时表的概念,该概念指出,在成功使用后,可以像其他数据库一样删除表。但是我们如何在 PL/SQL 块中使用它呢?
我尝试使用动态 SQL - 来使用它EXECUTE IMMEDIATE。但它给了我表必须声明错误。我在这里做什么?
私有临时表(可从 Oracle 18c 获得)在结束时被删除session/transaction,具体取决于 PTT 的定义。
- 该
ON COMMIT DROP DEFINITION选项创建一个特定于事务的私有临时表。在事务结束时,Oracle 会删除表定义和数据。- 该
ON COMMIT PRESERVE DEFINITION选项创建一个特定于会话的私有临时表。Oracle 在会话结束时删除所有数据并删除表。
您不需要drop手动进行。甲骨文将为您做这件事。
CREATE PRIVATE TEMPORARY TABLE ora$ptt_temp_table (
......
)
ON COMMIT DROP DEFINITION;
-- or
-- ON COMMIT PRESERVE DEFINITION;
Run Code Online (Sandbox Code Playgroud)
示例(执行ON COMMIT DROP DEFINITION后表被删除)COMMIT
示例ON COMMIT PRESERVE DEFINITION(表在执行后保留COMMIT,但在会话结束时将被删除)
注意:我目前无法访问 18c DB,并且 db<>fiddle 面临一些问题,因此我已经为您发布了图像。
干杯!!
| 归档时间: |
|
| 查看次数: |
12956 次 |
| 最近记录: |