我正在使用 ESQL/C 代码为 UI 提供后端支持,连接到 Informix 数据库。我正在我的代码中创建临时表。但是,我猜如果多个用户同时使用这个 UI,那么临时表可能已经存在于数据库中,这可能会产生问题。那么,有人可以建议我是否可以在我的 ESQL/C 代码中创建以 PID 作为后缀的临时表
create temp table tabname_PID (name char(10));
在 shell 脚本中,我通常使用tabname_$$
.
我正在使用 ESQL/C 代码为 UI 提供后端支持,连接到 Informix 数据库。我正在我的代码中创建临时表。但是,我猜如果多个用户同时使用这个 UI,那么临时表可能已经存在于数据库中,这可能会产生问题。那么,有人可以建议我是否可以在我的 ESQL/C 代码中创建以 PID 作为后缀的临时表
create temp table tabname_PID (name char(10));
在 shell 脚本中,我通常使用tabname_$$
.
您可以创建嵌入了 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 脚本中使用 - 临时表是会话专用的。