删除MonetDB中

时间:2017-03-20 22:42:25

标签: sql function temp-tables monetdb

请考虑以下情形。我有一堆用户定义的函数f_i,用于创建,填充和使用具有相同名称res的本地临时表:

create function f_i()
returns table( … )
begin
       # Result stats table.
       create local temporary table res(
             param1 int,
             param2 int
       );

       /* Populate res */
       /* Use res in some queries */

       return table(
             /* Query involving res */
       );
end;

我的第一个问题是:Does create local temporary table x创建一个表,只要声明它的函数完成执行就会被丢弃/删除?我认为情况确实如此,但我现在对此持怀疑态度,因为我们遇到了各种并发问题,指出res表没有从内存中正确清除。

这引出了我的第二个问题:如果存在这样的表,如何删除临时表?这样做的原因是为了防止table create例外(我们目前正在运行)。我想在这些方面取得成果:

create function f_i()
returns table( … )
begin
       # Drop local temporary table if such table exists.
       drop local temporary table res;         <-------- How do I do this in MonetDB?

       # Result stats table.
       create local temporary table res(
             param1 int,
             param2 int
       );

       /* Populate res */
       /* Use res in some queries */

       return table(
             /* Query involving res */
       );
end;

正如您所看到的,我希望显式删除本地临时表res(如果存在)。如果我在drop语句中留下local temporary个标记,MonetDB会抱怨它发现了意外的LOCALTEMPORARY个令牌。我不想删除这些标记,因为声明如下:

drop table res;

将删除具有该名称的默认函数模式中的任何表。

非常感谢任何帮助和提示!

1 个答案:

答案 0 :(得分:0)

试试以下?

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL   DROP TABLE #Temp;