繁体   English   中英

在MonetDB中的函数内删除本地临时表

[英]Drop a local temporary table within a function in 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;

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

任何帮助和提示,我们将不胜感激!

尝试跟随?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM