OracleCHR関数

Rocky Mountain Oracle Users Group(RMOUG)Training Days 2010で私が楽しんだプレゼンテーションの1つは、StephenJacksonのプレゼンテーション「SQLを使用したSQLの生成」でした。彼がプレゼンテーションで説明したテクニックのいくつかを使用してSQLにSQLを生成させましたが、私が考えていなかったことの1つは、CHR関数を使用してスクリプトを読みやすくすることでした。この投稿では、OracleのCHR文字列関数の実装の使用に焦点を当てていますが、他のデータベースもCHR(またはCHAR)関数をサポートしています。

CHRの有用性の一例は、クエリ自体で重要な文字を含む結果の作成です。CHRを適切に使用すると、SQL開発者は、クエリ構文の重要性を持つこれらの文字をエスケープする必要がなくなります。たとえば、オラクルのHRサンプルスキーマで姓を一重引用符で囲んで従業員の姓を出力するには、次のようなクエリを記述できます。

select '''' || last_name || '''' from employees; 

4つの一重引用符は、姓の前後の両方で引用符を正常にエスケープします。残念ながら、特により複雑なクエリの場合、引用符で迷子になりやすくなる可能性があります。ASCII 10進コード39は、CHRに渡されるときに一重引用符を生成するため、CHR(39)次に示すように、代わりに式を使用できます。

select CHR(39) || last_name || CHR(39) from employees; 

私にとって、これはより読みやすいです。同様に、さらに難しい文字をCHR関数で表すことができます。たとえば、Stephenはプレゼンテーションで、CHR(10)を使用して出力に改行を出力できることを指摘しました。

スティーブンが議論した興味深いアイデアの1つは、CHR関数を介して利用可能なさまざまな文字表現を表示するための単純なスクリプトの使用でした。ネットのASCIIチャートやasciitable.comでTechのようなリソースをいつでも参照できますが、コードを介して表現を単純に表示するのは興味深いことです。

-- displayCHR.sql -- -- Display the characters associated with basic and extended ASCII codes. -- SET head off SET pagesize 0 SET linesize 120 SET trimspool on SET feedback off SET verify off SET serveroutput on size 5000 BEGIN FOR i IN 32..255 loop Dbms_output.put_line(i || ' ' || chr(i)); END loop; END; / 

上記のコードスニペットは、SQL * Plusで実行すると、基本および拡張ASCII文字セットで使用可能な多数の文字を表示します。スプールコマンドを使用して、出力をファイルにスプールできます。Windowsベースのマシンでは、基本的なメモ帳アプリケーションを使用して、これらの生成されたシンボルをスプール出力ファイルで表示することもできました。

結論

Stephenがプレゼンテーションで指摘したように、CHR関数を使用すると、SQL * Plusスクリプトをより読みやすく保守しやすくすることができます。

このストーリー「OracleCHRFunction」は、もともとJavaWorldによって公開されました。