1

ESQL/C コードを使用して、UI のバックエンド サポートを提供し、Informix データベースに接続しています。コード内に一時テーブルを作成しています。ただし、複数のユーザーがこの UI を同時に使用すると、一時テーブルがデータベースに既に存在し、問題が発生する可能性があると思います。だから、私のESQL/Cコード内に接尾辞としてPIDを持つ一時テーブルを作成できるかどうか誰かが提案できますか

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

シェルスクリプトでは、私は通常tabname_$$.

4

1 に答える 1

2

PID が埋め込まれたテーブルを作成できますが、必須ではありません。一時テーブルは、それを作成したセッションでのみ表示されるため、競合を心配することなく、各セッションで同じテーブル名を使用できます (別個の ESQL/C プログラムを同時に実行します)。

不要であるという再確認にもかかわらず、それでも実行したい場合は、文字列からステートメントを PREPARE および EXECUTE (または 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;

また、すべてのクエリを準備する必要があります。固定名の一時テーブルを使用する明確な利点の 1 つは、一時テーブルを参照するすべてのものを準備する必要がないことです (ただし、PREPARE などを使用する利点はよくあります)。

$$同じ理由で、シェル スクリプトでも使用する必要はありません。一時テーブルはセッションに対してプライベートです。

于 2013-02-26T21:13:29.070 に答える