2009年2月23日月曜日

SPI で insert or update

 よくSQLでは、レコードが存在していれば更新し、存在していなければ挿入したいという事がありますが、それをPostgreSQL SPIで実現するための備忘録。尚、コードはバッファ・オーバーランに関して無考慮なので、そのまま踏襲しないように。


bool record_insert_hoge(
int id,
const char* namae
) {
char buf[ 512 ];
sprintf( buf, "insert into hoge (id, namae) values (%d,'%s');", id, namae );
return (SPI_OK_INSERT == SPI_execute( buf, false, 1 ));
}

bool record_update_hoge(
int id,
const char* namae
) {
char buf[ 512 ];
sprintf( buf, "update hoge set namae='%s' where id=%d returning *;", namae, id );
if( SPI_OK_UPDATE_RETURNING != SPI_execute( buf, false, 1 ) ) {
return false;
}
return (SPI_processed == 1);
}

bool record_insert_or_update_hoge(
int id,
const char* namae
) {
if( !record_update_hoge( id, namae ) ) {
return record_insert_hoge( id, namae );
}
return true;
}

0 件のコメント: