10.3 外部Cストアドルーチンのプログラム例
実数から小数部を取得する外部C関数の例を次に示します。
-
C関数本体(ファイル名:sample1.c)
/* ALL RIGHTS RESERVED,COPYRIGHT (C)2007,HITACHI,LTD. */ /* LICENSED MATERIAL OF HITACHI,LTD. */ /************************************************************************/ /* name = HiRDB 08-03 Cストアドファンクション サンプルプログラム 1 */ /************************************************************************/ #include <math.h> #include <stdio.h> /*---------------------------------------------------------------------*/ /* VARCHAR形式のデータを受け取るための構造体を定義する */ /*---------------------------------------------------------------------*/ typedef struct varchar{ short len; char str[80]; }VCH; /************************************************************************/ /* name = サンプル1 */ /************************************************************************/ void func_modf(double *value, double *ret, short *ind1, short *ind_ret, char *sqlstate, VCH *routine_name, VCH *specific_name, VCH *message_text ) { double int_value; /* modf関数を呼出して得られた小数部を戻り値に設定 */ *ret = modf(*value, &int_value); /* 戻り値の標識部を設定(非ナル) */ *ind_ret = 0; /* SQLSTATEを設定(正常終了) */ memcpy(sqlstate, “00000”, 5); /* メッセージテキストに空文字列を設定 */ message_text->len = sprintf(message_text->str, “”); }
上記のC関数本体を使用して,Cストアドファンクションを定義,実行する例を次に示します。
-
Cファイルのコンパイル
HP-UX(32ビットモード)の場合の例です。そのほかのOSの例については,「各OSでのCライブラリファイルの作成例」を参照してください。
cc +z -c sample1.c
-
Cライブラリファイルの作成
HP-UX(32ビットモード)の場合の例です。そのほかのOSの例については,「各OSでのCライブラリファイルの作成例」を参照してください。
ld -b -o sample1.sl sample1.o
-
Cライブラリファイルの新規登録(SQLのINSTALL CLIBを使用した例です)
INSTALL CLIB 'sample1.sl' ;
-
Cストアドファンクションの定義
CREATE function func_modf( parm1 FLOAT ) RETURNS FLOAT LANGUAGE C EXTERNAL NAME 'sample1.sl!func_modf' PARAMETER STYLE RDSQL;
-
Cストアドファンクションの実行
select func_modf(double_value) from t1