在Oracle 18中的另一个临时表中使用临时表

时间:2019-05-06 16:02:49

标签: oracle temporary oracle18c

在Oracle18中

是否可以在另一个临时表中使用一个临时表? 下面的示例:

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales 
ON COMMIT PRESERVE DEFINITION
AS
SELECT * FROM orders WHERE order_date = SYSDATE;


CREATE PRIVATE TEMPORARY TABLE ora$information 
ON COMMIT PRESERVE DEFINITION
AS
SELECT * FROM ora$ptt_today_sales WHERE customerID=5;

2 个答案:

答案 0 :(得分:1)

我在Live SQL(livesql.oracle.com)(确实是运行Oracle 19c)上进行了尝试,尽管如此,它可以正常运行,没问题。

但是,您编写的第二个代码不能用作私有临时表名称,应以ora$ptt_开头,该前缀与您在第一个表中使用的前缀相同。

该前缀由PRIVATE_TEMP_TABLE_PREFIX初始化参数定义。它的默认值为ora$ptt_(就像您的第一个CREATE TABLE语句一样)。由于您很可能没有在这两个命令之间进行更改,因此第二个表也应使用相同的前缀。

答案 1 :(得分:0)

谢谢您的回答,终于我可以在线运行v18的开发服务器了!好吧,事情是,这个简单的示例很好用,问题是当我在带有多个联接的SQL中使用私有临时表时,然后我收到错误:00000-“在并行查询服务器%s中发出错误信号” *原因:并行查询服务器达到异常条件。
对此进行了搜索,我发现oracle引擎假定使用多个会话,并且可能在一个会话中不存在私有临时表。有什么解决方法吗?我应该禁用此查询的并行执行吗?谢谢!