1

我正在使用 ESQL/C 代码为 UI 提供后端支持,连接到 Informix 数据库。我正在我的代码中创建临时表。但是,我猜如果多个用户同时使用这个 UI,那么临时表可能已经存在于数据库中,这可能会产生问题。那么,有人可以建议我是否可以在我的 ESQL/C 代码中创建以 PID 作为后缀的临时表

create temp table tabname_PID (name char(10));

在 shell 脚本中,我通常使用tabname_$$.

4

1 回答 1

2

您可以创建嵌入了 PID 的表,但这不是必需的。任何临时表仅在创建它的会话中可见,因此您可以在每个会话中使用相同的表名(单独但同时执行的 ESQL/C 程序),而不必担心冲突。

如果尽管确信这是不必要的,但您仍然想这样做,那么您必须准备和执行(或声明、打开、获取、关闭)字符串中的语句:

snprintf(sql, sizeof(sql), "CREATE TEMP TABLE tabname_%d(name CHAR(10))", (int)getpid());
EXEC SQL PREPARE s FROM :sql;
EXEC SQL EXECUTE s;

或使用 EXECUTE IMMEDIATE (这是明显的赢家):

EXEC SQL EXECUTE IMMEDIATE :sql;

然后,您还必须准备所有查询;使用固定名称临时表的一个明显优势是,如果您不想,您不必准备引用临时表的所有内容(尽管使用 PREPARE 等通常有好处)。

出于同样的原因,您也不必$$在 shell 脚本中使用 - 临时表是会话专用的。

于 2013-02-26T21:13:29.070 回答