在ESQL / C中使用PID创建临时表

时间:2013-02-26 20:48:41

标签: informix embedded-sql

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果再次保证没有必要,你仍然想要这样做,那么你必须从字符串中预处理并执行(或DECLARE,OPEN,FETCH,CLOSE)语句:

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脚本中使用$$ - 临时表对于会话是私有的。