外部プロシージャ

 OracleJavaのプロシージャ(Javaストアドプロシージャ)を使おうかと検討してみた。

 問題はOracle9iのVMは1.3。いろいろ試してみたが、どうもJCEなどを読み込んでくれないどころかVMすら立ち上がらなくなる。OracleVMも問題ありこなのか?

 仕方がないのでC言語をファンクションから呼び出すことに(目的の機能のC版があったため)。

 参考になったのはこれ
 http://www.ashisuto.co.jp/standard/tec/vol36/36exterpro.pdf

 さてコンパイルをして(Cなんか新人研修でしか使ったことがない!)、$ORACLE_HOME/libに共有ライブラリファイルを配置、Oracleの環境も書き直して、ライブラリを作成して、ファンクションを作って(このあたりはすべて上のファイルに書いてある)、実行!

 ・・・ORA-06522・・・あとは文字化けでわからん。

 なんとなくキーワードで検索
 http://search.yahoo.co.jp/bin/query?p=ORA+ELFCLASS32&fr=top%2c+top

 でわかった。
 http://www.mail-archive.com/oracle-l@fatcity.com/msg62572.html

 つまり、OSは32bitなのでデフォルトだと32bitでコンパイルされるのだが、Oracleが64bitなのでアウトなのだ。

 GCCコンパイルする際にパラメータを追加

 GCC -fPCI -64m -c XXX.c -o XXX.o ※繰り返すようですがC言語もmakeも解らないのでかなり適当

 まぁこれでなんとかなりました。

 で、テスト用の外部プロシージャができたので本物をコンパイル・・・うげ、本物でコンパイルのときに利用するライブラリが32bit(爆)。仕方がないので、クライアントに電話。

 おいら:「・・・というわけで途方にくれてます」
 先方 :「あ、開発環境は間違えて64bitなんですよ〜本番は両方32bitなので大丈夫です〜」

 ・・・おい。

 そう、本番はLinuxOracleを積んでいるのだが、開発環境ではなぜかSolarisとか、ほんとこまったちゃんな環境なのだ。

 結局、こうなった。

 先方 :「本番のDB、片系しか使っていないので残っている方でテストしてくださ〜い」

 
 ・・・いいのか、それで!?