外部プロシージャ
OracleでJavaのプロシージャ(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 -fPCI -64m -c XXX.c -o XXX.o ※繰り返すようですがC言語もmakeも解らないのでかなり適当
まぁこれでなんとかなりました。
で、テスト用の外部プロシージャができたので本物をコンパイル・・・うげ、本物でコンパイルのときに利用するライブラリが32bit(爆)。仕方がないので、クライアントに電話。
おいら:「・・・というわけで途方にくれてます」
先方 :「あ、開発環境は間違えて64bitなんですよ〜本番は両方32bitなので大丈夫です〜」
・・・おい。
そう、本番はLinuxにOracleを積んでいるのだが、開発環境ではなぜかSolarisとか、ほんとこまったちゃんな環境なのだ。
結局、こうなった。
先方 :「本番のDB、片系しか使っていないので残っている方でテストしてくださ〜い」
・・・いいのか、それで!?