7 SQL*Plusからのレポートの生成
この章では、問合せ結果を含むHTMLおよびCSVレポートの生成方法について説明します。この章の構成は、次のとおりです。
7.1 SQL*Plusコマンドラインを使用したレポートの作成について
プレーン・テキスト出力およびSQL*Plusコマンドライン・インタフェースを使用すると、完全なWebページ、Webページに埋め込まれるHTML出力またはCSV形式のデータを生成できます。SQLPLUS -MARKUP HTML ONまたはSET MARKUP HTML ON SPOOL ONを使用して、<HTML>および<BODY>タグが自動的に埋め込まれる完全なHTMLページを生成できます。SQLPLUS -MARKUP CSV ONまたはSET MARKUP CSV ONを使用して、レポートをCSV形式で生成できます。
デフォルトでは、MARKUP HTML ONを使用して取得されたデータはHTML形式で出力されます。ただし、オプションで、HTMLの<PRE>タグに直接出力して、SQL*Plusで表示される形式と同様にWebブラウザで表示できます。これらのコマンドの詳細は、「SQLPLUS MARKUPオプション」および「SET MARKUPコマンド」を参照してください。
SQLPLUS -MARKUP HTML ONは、プログラム・スクリプトにSQL*Plusを埋め込む場合に有効です。起動時、コマンドの実行前に、HTMLおよびBODYタグが出力されます。その後のすべての出力は、SQL*Plusが終了するまでHTML形式です。
-SILENTおよび-RESTRICTコマンドライン・オプションを-MARKUPとともに使用すると、SQL*Plusプロンプトとバナー情報を非表示にし、一部のコマンドの使用を制限できます。
SET MARKUP HTML ON SPOOL ONを使用すると、その後にスプールされたそれぞれのファイルに対するHTMLページを生成できます。SPOOL OFFを実行するか、またはSQL*Plusを終了すると、スプール・ファイルのHTMLタグが閉じます。
SET MARKUP HTML ON SPOOL OFFを使用すると、既存のWebページへの埋込みに適したHTML出力を生成できます。この方法で生成されたHTML出力には、<HTML>または<BODY>タグは含まれません。
SQL*Plusコマンドラインで-M[ARKUP] CSV ONオプションを使用することにより、ユーザー・セッションにログイン中にCSVマークアップを有効にできます。詳細は、SQL*Plusプログラムの構文を参照してください。ユーザー・セッションにログイン中は、SET MARKUP CSV ONコマンドを使用してCSVマークアップを有効にできます。
DELIMITERオプションを使用して、デリミタ文字を指定できます。QUOTE OFFを使用して、引用符なしでテキストを出力することもできます。
SET FEEDBACKコマンドのONLYオプションを使用することで、問合せにより返されたデータを非表示にすることができます。選択され問合せにより返された行の数が表示されます。
7.1.1 HTMLレポートの作成
SQL*Plusセッション中、SET MARKUPコマンドを対話形式で使用して、HTMLをスプール・ファイルに書き出します。出力結果はWebブラウザで表示できます。
SET MARKUP HTML ON SPOOL ONでは、SQL*Plusの出力をHTML形式にエンコードすることを指定するのみで、出力ファイルの作成またはファイルへの書出しの開始は実行しません。スプール・ファイルの生成を開始するには、SQL*PlusのSPOOLコマンドを使用する必要があります。このファイルには、<HTML>タグ、</HTML>タグなどのHTMLタグが含まれます。
HTMLファイルを作成する場合は、HTMLファイルの標準ファイル拡張子である.htmlまたは.htmを指定します。これによって、出力ファイルの種類を簡単に識別でき、また、WebブラウザでHTMLファイルを認識し、正しく表示することができます。拡張子を指定しない場合は、SQL*Plusのデフォルトのファイル拡張子が使用されます。
スプール・ファイルに最終的なHTMLタグを追加してファイルを閉じるには、SPOOL OFFまたはEXITを使用します。SPOOL filenameコマンドを入力すると、SPOOL OFFまたはEXITでは、現行のスプール・ファイルが閉じられ、指定した名前の新しいHTMLのスプール・ファイルが作成されます。
SET MARKUPコマンドを使用すると、必要に応じてHTML出力をONまたはOFFにできます。
この例では、プロンプトおよび問合せSQL文は非表示にされていません。スクリプトの起動方法によって、SET ECHO OFFまたはコマンドライン -SILENTオプションを使用すると、非表示にできます。
この例のSQL*Plusコマンドには、使用方法に関する項目が含まれています。
-
長いSQL*Plusコマンドの行を続けるには、ハイフンを使用します。
-
表のWIDTHおよびBORDER属性を設定するには、TABLEオプションを使用します。
-
DEPARTMENT_NAME列にENTMAP OFFを設定し、HTMLのハイパーリンクを正しく構成するには、COLUMNコマンドを使用します。引用符、山カッコなどのHTMLの特殊文字は、対応するエンティティである「"」、「&」、「<」および「>」には置き換えられません。
-
文字列と変数要素を連結してハイパーリンクを作成するには、SELECT文に引用符および連結文字を使用します。
Webブラウザまたはテキスト・エディタでreport.htmlソースを表示すると、次のように、Department列の表セルに完全な形式のハイパーリンクが設定されていることがわかります。
<html> <head> <TITLE>Department Report</TITLE> <STYLE type="text/css"> <!-- BODY {background: #FFFFC6} --> </STYLE> <meta name="generator" content="SQL*Plus 10.2.0.1"> </head> <body TEXT="#FF00Ff"> SQL> SELECT '<A HREF="http://oracle.com/' ||DEPARTMENT_NAME||'.html">'||DEPARTMENT_NAME ||'</A>' DEPARTMENT_NAME, CITY <br> 2 FROM EMP_DETAILS_VIEW <br> 3* WHERE SALARY>12000 <br> <p> <table WIDTH="90%" BORDER="5"> <tr><th>DEPARTMENT</th><th>CITY</th></tr> <tr><td><A HREF="http://oracle.com/Executive.html">Executive</A></td> <td>Seattle</td></tr> <tr><td><A HREF="http://oracle.com/Executive.html">Executive</A></td> <td>Seattle</td></tr> <tr><td><A HREF="http://oracle.com/Executive.html">Executive</A></td> <td>Seattle</td></tr> <tr><td><A HREF="http://oracle.com/Sales.html">Sales</A></td> <td>Oxford</td></tr> <tr><td><A HREF="http://oracle.com/Sales.html">Sales</A></td> <td>Oxford</td></tr> <tr><td><A HREF="http://oracle.com/Marketing.html">Marketing</A></td> <td>Toronto</td></tr> </table> <p> 6 rows selected.<br> SQL> spool off <br> </body> </html>
この例のSQLPLUSコマンドには、ネストした引用符による3つのレイヤーが含まれています。レイヤーには、内側から順に次のものがあります。
-
"2"は、BORDERに対するHTML属性値を引用符で囲んだものです。
-
BORDER="2"は、TABLEオプションに対するテキスト引数を引用符で囲んだものです。
-
"HTML ON TABLE 'BORDER="2" ' "は、-MARKUPオプションに対する引数を引用符で囲んだものです。
引用符のネスト方法は、オペレーティング・システムやプログラム・スクリプト言語によって異なります。
例7-1 対話型レポートの作成
SET MARKUPコマンドを使用すると、対話型のSQL*PlusセッションでHTML出力を作成できます。HTMLの<HEAD>タグには、埋込み型のスタイル・シートまたはその他の有効なテキストを挿入できます。SQL*Plusセッションを開いて、次のように入力します。
SET MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP ON - HEAD "<TITLE>Department Report</TITLE> - <STYLE type='text/css'> - <!-- BODY {background: #FFFFC6} --> - </STYLE>" - BODY "TEXT='#FF00Ff'" - TABLE "WIDTH='90%' BORDER='5'"
COLUMNコマンドを使用して、列の出力を制御します。次のCOLUMNコマンドでは、SQL問合せ出力に対する新しいヘッダー名を作成できます。最初のコマンドを使用すると、DEPARTMENT_NAME列にマップするエンティティをOFFにして、出力データのDEPARTMENT_NAME列にHTMLのハイパーリンクを正しく作成できます。
COLUMN DEPARTMENT_NAME HEADING 'DEPARTMENT' ENTMAP OFF COLUMN CITY HEADING 'CITY'
SET MARKUP HTML SPOOL ONを使用すると、HTMLがスプール・ファイルに書き出されます。次のSPOOLコマンドでは、指定したファイルに<HTML>および<BODY>タグの書込みをトリガーします。
SPOOL report.html
SPOOLコマンドの後の標準出力への入力または表示は、スプール・ファイルreport.htmlに書き出されます。
次のようにSQL問合せを入力します。
SELECT '<A HREF="http://oracle.com/'||DEPARTMENT_NAME||'.html">'||DEPARTMENT_NAME||'</A>' DEPARTMENT_NAME, CITY FROM EMP_DETAILS_VIEW WHERE SALARY>12000;
SPOOL OFFコマンドを入力します。
SPOOL OFF
スプール・ファイルreport.htmlを閉じる前に、</BODY>および</HTML>タグが追加されます。
report.sqlからの出力はファイルreport.htmlで、Webブラウザにロードできます。Webブラウザでreport.htmlを開きます。次のように表示されるはずです。
例7-2 SQLPLUSコマンドを使用したレポートの作成
オペレーティング・システムのプロンプトで次のコマンドを入力します。
SQLPLUS -S -M "HTML ON TABLE 'BORDER="2"'" HR@Ora10g @depart.sql>depart.html
depart.sqlには、次の内容が含まれています。
SELECT DEPARTMENT_NAME, CITY FROM EMP_DETAILS_VIEW WHERE SALARY>12000; EXIT
この例では、ユーザーHRでSQL*Plusを起動し、HRパスワードの入力を求めるプロンプトを表示させ、HTMLをONに設定し、TABLEにBORDER属性を設定して、スクリプトdepart.sqlを実行します。depart.sqlからの出力は、この場合では、オペレーティング・システム・コマンド「>」(オペレーティング・システムによって異なる場合があります)を使用してdepart.htmlファイルにリダイレクトされたWebページです。SQL*PlusがWebサーバーのCGIスクリプトでコールされた場合は、Webブラウザに送信されます。CGIスクリプトからのSQL*Plusのコールについては、レポートでのSQL*Plusコマンドの非表示についてを参照してください。
Webブラウザを起動し、適切なURLを入力してdepart.htmlを開きます。
7.1.1.1 HTMLエンティティ
一部の文字(「<」、「>」、「"」および「&」)は、HTMLで意味が事前定義されています。前述の例では、SET MARKUP HTML ONコマンドが入力されると、すぐに「>」の文字が「>」で置き換えられています。これらの文字をWebブラウザで表示できるようにするために、HTMLには代替文字のエンティティがあります。
表7-1 対応するHTMLエンティティ
文字 | HTMLエンティティ | 意味 |
---|---|---|
< |
< |
HTMLタグ・ラベルの開始 |
> |
> |
HTMLタグ・ラベルの終了 |
" |
" |
二重引用符 |
& |
& |
アンパサンド |
Webブラウザには「>」が表示されますが、エンコードされたHTMLファイルでの実際のテキストは、HTMLエンティティの「>」です。SET MARKUPオプションのENTMAPは、HTMLエンティティの置換を指定します。ENTMAPは、デフォルトでONに設定されています。デフォルトでは、「<」、「>」、「"」および「&」は、常にその文字を表すHTMLエンティティに置換されます。これによって、SQL*Plusコマンドまたは問合せ結果のデータにこれらの文字が存在した場合でも、Webブラウザが誤った解釈をしなくなります。
グローバル・レベルでSET MARKUP HTML ENTMAP ONを使用するか、または列レベルでCOLUMN column_name ENTMAP ONを使用して、ENTMAPを設定できます。
7.1.2 CSVレポートの作成
SQL*Plusコマンドラインで-M[ARKUP] CSV ONオプションを使用することにより、ユーザー・セッションにログイン中にCSVマークアップを有効にできます。詳細は、SQL*Plusプログラムの構文を参照してください。ユーザー・セッションにログイン中は、SET MARKUP CSV ONコマンドを使用してCSVマークアップを有効にできます。
DELIMITERオプションを使用して、デリミタ文字を指定できます。QUOTE OFFを使用して、引用符なしでテキストを出力することもできます。
CSVレポートの作成の詳細は、SET MARKUP CSV ONを参照してください。