2007年06月06日
IDSAdminとWindowsとDELIMIDENT...
今日、Windows上でIDSAdminを動かそうとしてトラブルに陥っている知人に会いました。環境を見せてもらうと、IDSAdminが発行しているSQLがエラーを発生させています。データベース上に確かに存在している表で、表の所有者も間違っていません。
しばらく原因がわからなかったのですが、ふと Windows のユーザー名に目がとまりました。ユーザー名に「大文字」が使われていたのです。どうやら、Informixは、ユーザー名などの識別子を引用符で囲まないと( 囲むためには、環境変数 DELIMIDENT を使う必要があります ) 小文字に変換してから処理をしているようです。かつ、ユーザー名を確認する時にWindows 上では、OSから返ってくるユーザー名をそのまま参照して比較しているようです。このため、例えばこんなことが起こっているようです。
IDSAdminは、ユーザー名をつけたSQLを生成する時にユーザー名を引用符で囲みません。このため、Windows上のIDSインスタンスに対して使う時は、Windowsのユーザー名に大文字を使うと嵌ります。気をつけた方が良いですね。もしInformixで使用するユーザー名に大文字を含む名前をつけてしまっていたら、コントロールパネルの管理ツールを使ってユーザー名を変更しておくことをお勧めします。
しばらく原因がわからなかったのですが、ふと Windows のユーザー名に目がとまりました。ユーザー名に「大文字」が使われていたのです。どうやら、Informixは、ユーザー名などの識別子を引用符で囲まないと( 囲むためには、環境変数 DELIMIDENT を使う必要があります ) 小文字に変換してから処理をしているようです。かつ、ユーザー名を確認する時にWindows 上では、OSから返ってくるユーザー名をそのまま参照して比較しているようです。このため、例えばこんなことが起こっているようです。
Windows上のユーザー名: SHIBUYA
失敗するSQL文の例:
SELECT * FROM shibuya.mytable;
SELECT * FROM SHIBUYA.mytable;
成功するSQL文の例:
SELECT * FROM mytable;
SELECT * FROM 'SHIBUYA'.mytable; -- ( ユーザー名を引用符で囲むには事前に環境変数DELIMIDENTを設定する必要があります。)
IDSAdminは、ユーザー名をつけたSQLを生成する時にユーザー名を引用符で囲みません。このため、Windows上のIDSインスタンスに対して使う時は、Windowsのユーザー名に大文字を使うと嵌ります。気をつけた方が良いですね。もしInformixで使用するユーザー名に大文字を含む名前をつけてしまっていたら、コントロールパネルの管理ツールを使ってユーザー名を変更しておくことをお勧めします。
環境変数 DELIMIDENTについて:
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlr.doc/sqlrmst198.htm
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlr.doc/sqlrmst198.htm
Posted by oninit at 23:28│Comments(0)
│ちょっと細かいテックネタ
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。