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