【发布时间】:2013-09-19 18:26:16
【问题描述】:
我是 Oracle Sql 的新手,遇到一个问题:
我想在过程中创建一个临时表。
喜欢:
CREATE PROCEDURE P
AS
BEGIN
CREATE TEMPORARY TABLE A(ID int);
END P;
但这给了我一个错误
如何在过程中创建临时表。
我在 stackoverflow 上看到了其他答案,但没有正确回答我的问题 你能帮帮我吗?
【问题讨论】:
-
我认为您想要的是将
CREATE GLOBAL TEMPORARY TABLE A(ID INT) ON COMMIT DELETE ROWS放在程序之外。它将是特定于会话的,并在每次提交时清除。 -
@ManishSharma - 那么你只是产生了每天创建和删除表的成本吗?我不明白为什么您不会像创建系统中的任何其他表一样只创建一次表。您不会有任何引用该表的 PL/SQL 代码?
-
@ManishSharma - 在 Oracle 中,临时表的定义是永久性的。只有表中的数据是临时的。无论该表是临时的还是永久的,每天都创建和删除同一个表是没有意义的。
-
当然,如果您的过程中途失败,那么无论如何您只是在系统上留下了一个表,并且下次运行该过程时它将失败,因为该表已经存在。您最好还添加代码以检测表是否已存在,如果存在则不要尝试再次创建它。这样,如果您获得永久创建表的权限,您也不必再次重新部署代码。
标签: sql oracle stored-procedures