- PR -

DB2 連合DB機能+PHPの問題

1
投稿者投稿内容
muko
常連さん
会議室デビュー日: 2002/06/18
投稿数: 25
投稿日時: 2005-09-08 13:11
いつも参考にさせていただいています。

DB2の連合DB機能をPHPから使用した時の問題ですが、

1.create wrapper ・・・
2.create server ・・・
3.create user mapping ・・・
4.create nickname ・・・

で別DBに対してSQLを実行できるかと思います。

ここで、phpからNICKNAMEで定義した表にSQLを実行すると、、
Warning: odbc_exec(): SQL error: [IBM][CLI Driver][DB2/LINUX] SQL30090N 操作がアプリケーション実行環境で無効です。理由コード = "22"
のエラーが出てしまいます。

SQL30090N を調べると、

22 フェデレーテッド挿入、更新、または削除操作は、関数、データ変更表参照、動的コンパウンド・ステートメント、トリガー、および次のアプリケーション実行環境では無効です。
o SAVEPOINT が有効になっている
o スクロール可能カーソルが使用されている
o ターゲット・ビューに、複数の表またはニックネームが含まれている

理由 22 の場合
フェデレーテッド挿入、更新、または削除操作を除去するか、以下を実行します。
o フェデレーテッド挿入、更新、または削除操作を関数、データ変更表 参照、動的コンパウンド・ステートメント、またはトリガーの外で実行する
o または、有効になっている savepoint を解放する
o スクロール可能カーソルの使用を除去する
o 1 つの表またはニックネームだけを参照するように、ターゲット・ビューを再定義する
o フェデレーテッド挿入、更新、または削除操作をトリガーの外で実行する

でしたが、行ったのは単一表のSELECTのみで INSERT/UPDATE を行う予定はありません。

$db = odbc_connect($dbname,$username,$password);
$result=odbc_exec($db,"select * from 連合DB NICKNAME表");(odbc_prepareでも同じエラーが出ます)

(phpでローカル表に対してのSQLは正常に実行できます。)

環境は、

連合DB定義側(NICKNAME定義側)
OS:Red Hat Enterprise Linux ES4(INTEL 32bit)
DB:DB2 WSE V8.2 DB2 v8.1.2.96 FixPak10(32bit)
httpd-2.0.54
php-4.4.0(php-5.0.4)

連合DB接続側
OS:AIX4.3.3(POWER3 32bit)
DB:DB2 EEE V7.2 DB2 v7.1.0.51(32bit)

クライアント側からのNICKNAME表に対しての、SQLの実行は問題なく出来ます。
また、DBIをインストールしてperlからのNICKNAME表へのSQLも問題がありません。

ウェブのページはphpで統一している為出来ればphpで利用したいのですが・・・

どなたか同じような事例で情報をお持ちの方がいらっしゃいましたら教えていただけないでしょうか?
muko
常連さん
会議室デビュー日: 2002/06/18
投稿数: 25
投稿日時: 2005-09-20 15:32
解決しました。
odbc_ 関数から db2_ 関数へ変更する事で回避できました。
1

スキルアップ/キャリアアップ(JOB@IT)