0

ecpg ホスト変数を使用して psql テーブルに null 値を挿入したいのですが、これを行う方法がわかりません。以下に簡単な例を示します。

EXEC SQL BEGIN DECLARE SECTION;
char var1; 
int var2;
EXEC SQL END DECLARE SECTION;

int main(){
  EXEC SQL CONNECT TO .....
  create();
  insert();
  EXEC SQL COMMIT WORK;
  return 0;
}
void create(){ 
  CREATE TABLE mytable(var1 char(10), var2 int );
}

void insert(){
  EXEC SQL INSERT INTO mytable (var1, var2 ) VALUE (:var1, :var2);
}

データベースの var1 と var2 に NULL を挿入したいのですが、ホスト変数 (:var1, :var2) でそれを行う方法を知っている人はいますか?

* ":var1" を "NULL" に置き換えることはうまくいきますが、良い方法ではないようです。

*インジケーター http://www.postgresql.org/docs/8.3/static/ecpg-variables.htmlによって変数がnullかどうかを判断できることはわかっています が、値を挿入または更新する方法はわかりませんこの方法で?

4

1 に答える 1

0

やったー

あなたがこれを好きなら、私は「挿入」もインジケーターを使うことができることを試しました:

short var1_ind, var2_ind;

void insert(){
  EXEC SQL INSERT INTO mytable (var1, var2 ) 
  VALUE (:var1 INDICATOR :var1_ind, :var2 INDICATOR :var2_ind);
}

NULL を var1 に挿入したい場合は、インディケータ < 0 にしてください:

var1_ind = -1

var1_ind に -1 を割り当てた後、:var1 の値に関係なく、DB の var1 に NULL を挿入します。

それはマニュアルからのいくつかの情報です

インジケータ変数 val_ind は、値が null でない場合はゼロになり、値が null の場合は負になります。

インジケーターには別の機能があります。インジケーターの値が正の場合、値は NULL ではなく、ホスト変数に格納されたときに切り捨てられたことを意味します。

于 2015-03-27T03:31:30.120 に答える