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

Posted

技术标签:

【中文标题】使用 prepare 语句在 informix 4gl 中创建临时表【英文标题】:Creating a temporary table in informix 4gl using prepare statement 【发布时间】:2018-07-27 16:54:09 【问题描述】:

我一直在尝试创建一个函数来加载一些文件,根据现有表将它们插入到临时表中,然后验证加载的文件上没有重复的行,然后将它们插入到数据库中的适当表中,尝试使用这样的东西:

let statement = " select * from ", vtable clipped, " where 1=0 into temp t_",vtable clipped
prepare pstatement from  statement 
execute pstatement

无济于事,因为临时表似乎是在与我正在工作的会话不同的会话上创建的。

有什么建议吗?

先谢谢大家

【问题讨论】:

【参考方案1】:

如果您准备并执行如图所示的语句,它将在您当时使用的连接上创建。如果你不搞乱连接(CONNECT、DISCONNECT、SET CONNECTION),那么它应该是干净的——如果语句有效的话。您是否正在检查错误(也许是错误停止时)?或者您是否显示了statement 以确保 SQL 符合预期(例如,没有意外地截断字符串 - 这可能解释了表似乎丢失的原因)。

请记住,临时表是会话专用的。如果在 I4GL 程序中运行 LOAD 语句,应该没有问题,但不能使用带有临时表的单独加载程序。就数据库而言,它必须是“永久”或“常规”表,即使您在创建后不久将其删除。

您还可以准备显式 CREATE TEMP TABLE 语句来创建表。

还要考虑使用外部表是否有助于加载。还有一些违规表可用于在直接加载到主表时捕获有问题的行。

【讨论】:

以上是关于使用 prepare 语句在 informix 4gl 中创建临时表的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中使用informix unload语句?

在 INFORMIX 4GL 的报告中对“ORDER BY”使用“IF 语句”

Informix 11.5 SQL 语句性能监控方法及实现

Informix:如何获取最后一个插入语句的 rowid

MySQL-PREPARE语句

IBM Informix Spatial DataBlade 选择语句错误