请考虑以下情形。我有一堆用户定义的函数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会抱怨它发现了意外的LOCAL
或TEMPORARY
个令牌。我不想删除这些标记,因为声明如下:
drop table res;
将删除具有该名称的默认函数模式中的任何表。
非常感谢任何帮助和提示!
答案 0 :(得分:0)
试试以下?
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL DROP TABLE #Temp;