[pgsql-jp: 26558] delete,updateの戻値について

kaneshige kaneshige @ unified.co.jp
2002年 7月 2日 (火) 17:10:23 JST


はじめまして。
誠に、初歩的な質問で申し訳がありません。
(初心者なので勘弁してください)

現在、red hat7.1にpostgresql7.2.1をインストールして、C言語を用いて、
select, insert, update, deleteのテストプログラムを組んでいます。
それらの戻り値についての質問です。

update, delete に関しては、該当するデータがなくても PQresultStatus(res)は
PGRES_COMMAND_OK
を返してくるのですが、これは正常なのでしょうか?
insertに関しては、プライマリーキーが重複していると、PQresultStatus(res)は
PGRES_COMMAND_OK以外を返してきます。

どうかご教授ください。

私の、ソースの一部を下記します。

(insert)
  /* SQL文作成 */
  sprintf(query_string,"INSERT INTO perf_test VALUES("
   " %d, %d, %d, %d, %d, %d, %d, %d, %d, %d,"
   " '%c', '%c', '%c', '%c', '%c',"
   " '%c', '%c', '%c', '%c', '%c')",
   randnum[0], randnum[1], randnum[2], randnum[3],
   randnum[4], randnum[5], randnum[6], randnum[7],
   randnum[8], randnum[9],
   randchar[0], randchar[1], randchar[2], randchar[3],
   randchar[4], randchar[5], randchar[6], randchar[7],
   randchar[8], randchar[9]
   );

  /* トランザクション処理開始 */
  PQexec(conn, "BEGIN WORK");

  /* SQL文発行 */
  res = PQexec(conn, query_string);
  if (PQresultStatus(res) != PGRES_COMMAND_OK){
   fprintf(fno,"INSERT query failed.\n");
   PQexec(conn, "ROLLBACK WORK");
  }else
  {
   fprintf(fno, "%d\n", randnum[0]);
   PQexec(conn, "COMMIT WORK");
  }

  /* 結果をクリア */
  PQclear(res);


(delete)
  /* SQL文作成 */
  sprintf(query_string,"DELETE FROM perf_test WHERE num1 = %d",
   randnum);

  /* トランザクション処理開始 */
  PQexec(conn, "BEGIN WORK");

  /* SQL文発行 */
  res = PQexec(conn, query_string);
  if (PQresultStatus(res) != PGRES_COMMAND_OK){
   fprintf(fno,"DELETE query failed.\n");
   PQexec(conn, "ROLLBACK WORK");
  }else
  {
   fprintf(fno, "%d\n", randnum);
   PQexec(conn, "COMMIT WORK");
  }

  /* 結果をクリア */
  PQclear(res);

(update)
  /* SQL文作成 */
  sprintf(query_string,"UPDATE perf_test SET num2 = %d"
   " WHERE num1 = %d",
   randnum[0], randnum[1]);

  /* トランザクション処理開始 */
  PQexec(conn, "BEGIN WORK");

  /* SQL文発行 */
  res = PQexec(conn, query_string);
  if (PQresultStatus(res) != PGRES_COMMAND_OK){
   fprintf(fno,"UPDATE query failed.\n");
   PQexec(conn, "ROLLBACK WORK");
  }else
  {
   fprintf(fno, "%d\n", randnum[0]);
   PQexec(conn, "COMMIT WORK");
  }

  /* 結果をクリア */
  PQclear(res);






pgsql-jp メーリングリストの案内