VARCHAR という型も使用可 #include <stdio.h> #include <stdlib.h> #include <libpq-fe.h> EXEC SQL BEGIN DECLARE SECTION; int in_id; VARCHAR in_data[32]; int out_id; VARCHAR out_data[32]; EXEC SQL END DECLARE SECTION; int main() { EXEC SQL CONNECT TO mydb USER myuser; EXEC SQL TRUNCATE foo; /* ホスト変数に値を設定して挿入 */ in_id = 1; in_data.len = strlen("鈴木"); strcpy(in_data.arr, "鈴木"); EXEC SQL INSERT INTO foo VALUES (:in_id, :in_data); printf("insert table, sqlca.sqlcode = %d¥n", sqlca.sqlcode); /* 検索結果をホスト変数に設定 */ out_id = 0; strcpy(out_data.arr, ""); // 空値に設定 printf("select before, out_id = %d, out_data.len = %d, out_data.arr = %s¥n", out_id, out_data.len, out_data.arr); EXEC SQL SELECT id, data INTO :out_id, :out_data FROM foo WHERE id = :in_id; printf("select before, out_id = %d, out_data.len = %d, out_data.arr = %s¥n", out_id, out_data.len, out_data.arr); EXEC SQL COMMIT; EXEC SQL DISCONNECT; return 0; } $ ./sample insert table, sqlca.sqlcode = 0 select before, out_id = 0, out_data.len = 0, out_data.arr = select before, out_id = 1, out_data.len = 6, out_data.arr = 鈴木 $ • 実行結果 VARCHAR型で宣言した変数は、 以下のC言語構造体に変換される。 struct varchar_1 { int len; char arr[ 32 ]; } in_data ; len には文字列長(終端¥0を含まない長さ)を設定。 arr には文字列本体を設定。 検索結果も同様に格納される。 文字列自体はarrを参照する。