ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

4.3.3 その他の被準備文を実行する

データの挿入や更新などの操作を動的パラメタ指定を指定して行うには、USING句を指定したEXECUTE文を使用します。EXECUTE文で実行できる被準備文は、動的SELECT文以外の準備可能文です。準備可能文の詳細については、“4.1 動的SQLの概念”を参照してください。

SQL文変数の内容が準備可能動的UPDATE文:位置づけまたは準備可能動的DELETE文:位置づけの場合は、事前に対応するカーソルをオープンしておくことが必要です。また、指定したカーソルは動的カーソルであることが必要です。

SQLDA構造体の場合

動的パラメタ指定のあるUPDATE文:探索の指定例を以下に示します。なお、SQLDA構造体を操作するSQL文の詳細については、“図4.3 被準備文の動的パラメタ指定値の設定手順”の例を参照してください。

端末から入力したUPDATE文:探索の例です。端末から入力した動的パラメタ指定の値を設定句としてデータを更新します。

     [端末から入力したUPDATE文:探索をstrに格納]
                    :
EXEC SQL PREPARE STMID FROM :str;
size = sizeof(SQLDA) + sizeof(sqlvar) * (100 - 1);
sqlda_in = (SQLDA *)malloc(size);
EXEC SQL DESCRIBE INPUT STMID USING SQL DESCRIPTOR :sqlda_in;
icount = sqlda_in->SQLD;
for( i = 0; i < icount; i++ ) {
    vartype = sqlda_in->SQLVAR[i].SQLTYPE;
    varleng = sqlda_in->SQLVAR[i].SQLLEN;
                    :
     [動的パラメタ指定の情報をSQLDA構造体から取得]
                    :
    sqlda_in->SQLVAR[i].SQLTYPE = 1;
    sqlda_in->SQLVAR[i].SQLLEN = 14;
                    :
     [端末から入力した動的パラメタ指定の値をSQLDA構造体に設定]
                    :
}
EXEC SQL EXECUTE STMID USING SQL DESCRIPTOR :sqlda_in;
free( sqlda_in ); 
EXEC SQL DEALLOCATE PREPARE STMID;
                    : 

SQL記述子域の場合

動的パラメタ指定のあるUPDATE文:探索の指定例を以下に示します。なお、SQL記述子域を操作するSQL文の詳細については、“SQLDA構造体(動的パラメタ指定)を使用したアプリケーションの例”の例を参照してください。

端末から入力したUPDATE文:探索の例です。端末から入力した動的パラメタ指定の値を設定句としてデータを更新します。

                    :
     [端末から入力したUPDATE文:探索をstrに格納]
                    :
EXEC SQL PREPARE STMID FROM :str; EXEC SQL ALLOCATE DESCRIPTOR 'INDESC' WITH MAX 100;
EXEC SQL DESCRIBE INPUT STMID USING SQL DESCRIPTOR 'INDESC';
EXEC SQL GET DESCRIPTOR 'INDESC' :icount = COUNT;
for( i = 1; i <= icount; i++ ){
    EXEC SQL GET DESCRIPTOR 'INDESC' VALUE :i…
                    :
     [動的パラメタ指定の情報をSQL記述子域から取得]
                    :
    EXEC SQL SET DESCRIPTOR 'INDESC' VALUE :i …
                    :
     [端末から入力した動的パラメタ指定の値をSQL記述子域に設定]
                    :
} 
EXEC SQL EXECUTE STMID USING SQL DESCRIPTOR 'INDESC';
EXEC SQL DEALLOCATE DESCRIPTOR 'INDESC';
EXEC SQL DEALLOCATE PREPARE STMID;
                    :