IDS11.70を使用しています。
一時テーブルの列数のカウントを取得できるようにしたいので、4gl / genericoコードで、正しい数の疑問符を「putcursor」ステートメントに入れる関数を使用できます。
たとえば、次の種類のコードを置き換えたいとします。
declare put_curs1 cursor for
insert into my_temp_table values(?,?,?,?,?,?)
このようなもので:
let str = "insert into my_temp_table values (
format_place_holder_string_for_insert( "my_temp_table" ) CLIPPED, ")"
prepare put_stment1 from str
declare put_curs1 cursor for put_stment1
通常のテーブルに対してはすでにこれを行っているため、テーブルスキーマを変更して列数を増減する必要がある場合でも、putカーソルを使用した挿入で間違った列数でコードが破損することはありません。通常のテーブルのこの関数では、使用する列数を取得します。
select count(*)
from systables, syscolumns
where systables.tabname = table_name
and systables.tabid = syscolumns.tabid
しかし、一時テーブルに対してこれを実行しようとすると、何に結合するか、またはどの列が一時テーブルにある列の数を示しているかがわかりません。これは私がこれまでに持っているものです:
select *
FROM sysmaster:systabnames n, sysmaster:systabinfo i, sysmaster:syssessions s
WHERE sysmaster:bitval(i.ti_flags, "0x0020") = 1
AND n.dbsname = database_name
AND i.ti_partnum = n.partnum
AND s.sid = dbinfo("sessionid")
AND n.tabname = table_name;
したがって、select *
必要なのではなくselect count( columns )
、列を数えるためにどこに参加すればよいのでしょうか。突っついたのですが、必要な参加が見つかりません。
ありがとう、ブライス・ステンバーグ