てぃーだブログ › Unofficial oninit blog › ちょっと細かいテックネタ › 英大文字で名前をつけた識別子...

2009年01月01日

英大文字で名前をつけた識別子...

こんな記事を見つけました。

以前、Windows版のInformix Dynamic Serverで、大文字のユーザー名を使うとどうなるかについて書いたことがありました。

Informix Dynamic Serverでは、クオートされて(引用符で囲まれて)いない識別子は小文字に変換されてから取り扱われます。

こちらの記事にあるテストプログラム(SQL)の実行結果も、postgreSQLでの結果と同じになります。

ところで、繰り返しますがInformixでは、デフォルトでは識別子をクオートする書式は許されていません。そのまま実行すると文法エラーになります。以下のように、環境変数DELIMIDENTを設定してからクライアントを実行すればOKです。
sh-3.2$ dbaccess - -
> create database mydb with log;

Database created.

> create table "MyTable" ( col1 integer, col2 varchar(10) );

201: A syntax error has occurred.
Error in line 1
Near character position 24
> ^Csh-3.2$ export DELIMIDENT=y
sh-3.2$ dbaccess mydb -

Database selected.

> create table "MyTable" ( col1 integer, col2 varchar(10) );

Table created.

上の例では、文法エラー ( SQL -201 ) が発生したので一度クライアントを ^C で終了させ、環境変数DELIMIDENTを設定して再びクライアントを実行し同じSQLを実行しています。



同じことをあらためてDB2で実行しようと思い、Mac OSX版のDB2 9.5.2 (Beta)をダウンロードしてみました...

インストール時のヒント集が紹介されていたので参考にしながらインストール。Mac OSX 10.5.6上で無事に動き出しました、が...

Informix に手が慣れていると、こんなエラーが出まくりです。

db2 => create table t ( col1 integer, col2 char(10) );
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token ";" was found following "ger, col2 char(10) )".
Expected tokens may include: "END-OF-STATEMENT". SQLSTATE=42601
db2 => create table t ( col1 integer, col2 char(10) )
DB20000I The SQL command completed successfully.


文末にセミコロンつけちゃいけないんですね。



タグ :db2sqlidsmac

同じカテゴリー(ちょっと細かいテックネタ)の記事
DBACCESS_COLUMNS
DBACCESS_COLUMNS(2020-04-03 00:33)


この記事へのコメント
SIM大先生、

ありがとうございまする。私には "-t"が必須になりそうです。

あ、言い忘れましたが明けましておめでとうございます。今年もよろしくお願いいたします。
Posted by oninitoninit at 2009年01月01日 22:42
DB2コマンドプロンプトを起動する際に、

> db2 -t

で起動すると文末のセミコロンを待つようになりますよ。
Posted by SIM at 2009年01月01日 15:21
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。