당연합니다. SQL 에러가 없다고 성공으로 나오는 것이 아니고, SQL 명령어를 제대로 실행한 경우 성공으로 나오죠. 그건 당연한 결과 이겠지요. 비록 SQL 결과 DB 에 아무런 영향을 못미치더라도 성공한 건 성공 한거죠.
delete/update 구문 등에 의해 영향을 받은 row 가 있는가 확인해 보기 위해서는 다음 함수를 이용해야 합니다.
char * PQcmdTuples(const PGresult *res);
이 함수는 update/delete/insert 명령어 실행 결과 몇개의 row 가 영향을 받았는가 하는 그 row 의 갯수를 문자 자료형으로 돌려 줍니다. 즉 10개의 row 가 update 되었다면 '10' 이 돌아온다는 거죠.
도움이 되셨길 바랍니다.
위의 코드는 다음과 같이 고쳐질수 있을 듯...
============================================================
// 중간 생략
lsSql = " delete from tb_user where user_id = 'jaeho' ";
res = PQexec(conn, lsSql);
if(PQresultStatus(res) != PGRES_COMMAND_OK)
{
no_of_rows = PQcmdTuples(res);
printf ("%s rows are deleted\n",no_of_rows);
PQclear(res);
PQfinish(conn);
return(-1);
}
// 중간 생략
=============================================================
-- 윤재호 님이 쓰신 글:
>> c와 postgresql을 연동하고 있습니다.
>> 아래와 같이 delete를 하려고 합니다.
>> 결과는 PQresultStatus(res)를 통해서 알 수 있지만,
>> 제가 해본 결과로는 쿼리문상에 오류가 없으면 무조건 성공한 것으로 나오는데,
>> 제가 바라는것은 'jaeho'라는 user_id가 없으면 결과적으론 delete를 수행하지 못한것 아닙니까?
>> 이런 경우의 결과 값도 가지고 올 수 있는지?
>> 고수님덜 부탁드립니다.
>>
>> ============================================================
>> // 중간 생략
>> lsSql = " delete from tb_user where user_id = 'jaeho' ";
>> res = PQexec(conn, lsSql);
>> if(PQresultStatus(res) != PGRES_COMMAND_OK)
>> {
>> PQclear(res);
>> PQfinish(conn);
>> return(-1);
>> }
>> // 중간 생략
>> =============================================================
|