1

クエリをSQLにするテーブルを検索できるライブラリのリストを設定するスキーマを定義したいと思います。

現時点では、次の文字列接続を使用して DB2 を IBMi に接続できます。

 $user = 'USER';
 $password = 'PWD';
 $hostname = '192.168.1.100';
 $db = 'S6528B5A';
 $conn_string = "DRIVER={iSeries Access ODBC  Driver};
                 SYSTEM=$hostname;
                 PROTOCOL=TCPIP;
                 UID=$user;
                 PWD=$password;
                 DATABASE=$db;
                 DefaultSchema={LIB1,LIB2};";

接続が正常に確立され、リソース ID #3 が取得されますが、SQL クエリを実行しようとすると:

$sql = 'SELECT * FROM FILE1';
$rows = odbc_exec($conn, $sql);

ファイルが見つからないエラー SQL 状態 S0002 が表示されます (間違ったライブラリでファイルを検索しているかのように、接続を開いたのと同じユーザー名でライブラリを検索します)。

最初の接続で環境を設定し、クエリを実行するにはどうすればよいですか?

4

1 に答える 1

3

この接続文字列を使用して、システムの名前付けを有効にし、既定のライブラリを設定しないようにします。

$conn_string = "DRIVER={iSeries Access ODBC  Driver};
  SYSTEM=$hostname;
  PROTOCOL=TCPIP;
  UID=$user;
  PWD=$password;
  Naming=1;
  DefaultSchema=,LIB1,LIB2;";

クライアント アクセス ODBC: デフォルト ライブラリ設定

ODBC 接続文字列のキーワード

関連部分の抜粋は次のとおりです。

SQL 命名規則では、オペレーティング システムは、修飾されていないオブジェクトを見つけるためにライブラリ リスト検索を実行しません。デフォルトのコレクションが定義されている場合、デフォルトのコレクションを使用して、修飾されていない SQL ステートメントが解決されます。

...

SYS 命名規則では、修飾されていない SQL ステートメントはデフォルト コレクションに移動します。デフォルトのコレクションがない場合は、現在のライブラリが使用されます。現行ライブラリーが指定されていない場合は、ライブラリー・リストが使用されます。

...

デフォルト コレクション

修飾されていない SQL 名を含む SQL ステートメントを処理するときに使用されるライブラリーを決定する、ODBC によって設定されるジョブ属性。既定のコレクションが設定されている場合、プロシージャ、関数、および型を除くすべての非修飾オブジェクトは、命名規則に関係なく、既定のコレクションに存在する必要があります。

...

ODBC でライブラリ リストを検索するにはどうすればよいですか?

上で説明したように、ODBC データ ソースを編集し、システムの命名を SYS に設定します。既定のライブラリは空にするか、R510 より古いバージョンでは、既定のコレクションが定義されないように、既定のライブラリ設定をコンマで開始する必要があります (たとえば、",MYLIB1, MYLIB2")。


Odbc 接続文字列形式、ファイルが見つからない

于 2012-04-30T16:17:09.823 に答える