Informix - 如果存在则删除临时表

Posted

技术标签:

【中文标题】Informix - 如果存在则删除临时表【英文标题】:Informix - Delete temp table if exists 【发布时间】:2016-02-03 00:19:51 【问题描述】:

我正在尝试在运行查询时删除临时表。我找不到答案,并且已经搜索过文档。

基本上,我要做的是检查表是否存在;如果确实存在,请将其删除并继续选择,以便将结果插入临时表中。如果它不存在,那么,只需创建 TEMP 表,以便插入结果。

我使用的是 Informix 11.70

【问题讨论】:

【参考方案1】:

如果在 11.70 中支持(在 12.10 中),则语法为:

 DROP TABLE IF EXISTS temp_table_name;

DROP TABLE 的 11.70 手册表明它存在于 11.70 和 12.10 中。

然后使用INTO TEMP temp_table_name 子句运行查询以重新创建表。

【讨论】:

.net 提供程序是否支持此语法?我正在针对 CSDK 4.10FC4 和 IfxException 进行尝试:“错误 [42000] [Informix .NET 提供程序][Informix]发生了语法错误。” 最相关的是“您使用哪个版本的 Informix 作为数据库服务器?” IF EXISTS 表示法是在 11.70 中添加的,因此如果您使用的是 11.50 或更早版本,服务器将根本不支持该表示法。我不希望 .NET 提供程序本身存在特定问题。我不希望它解析和拒绝语法(这是服务器的工作,而不是客户端 API 的工作)。不过更好笑的事情已经知道了,而且 CSDK 4.10.FC4 通常是和 Informix 12.10(名义上是 12.10.FC4)服务器相关联的,所以我有点疑惑。 哦,当然 - 这是有道理的。我检查了我正在使用的开发服务器,它是 11.10.UC1,所以这就解释了。我在 12.10FC8 服务器上运行它,它按预期工作。 太棒了。我喜欢这样的问题的简单解决方案。我会观察到,就 IBM 而言,11.10 已经停止服务多年。理想情况下,即使是开发服务器也不应该使用它。更重要的是它不用于生产,但这显然不是问题。【参考方案2】:

还可以添加异常块,如:

Begin
    On Exception in (-206)
    End Exception with Resume;

    Drop table <<myTempTable>>;
End;

【讨论】:

以上是关于Informix - 如果存在则删除临时表的主要内容,如果未能解决你的问题,请参考以下文章

如何删除在线表informix Db中的大量行

sql 删除临时(临时)SQL表(如果存在)

删除临时表(如果存在)

检查是否存在临时表,并在创建临时表之前删除它是否存在

Informix:计算临时表中的列数?

使用 prepare 语句在 informix 4gl 中创建临时表