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

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

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

我使用的是 Informix 11.70

【问题讨论】:

    标签: sql informix


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多