ヘッダーをスキップ

SQL*Plus ユーザーズ・ガイドおよびリファレンス
10g リリース2(10.2)

B19277-01
目次
目次
索引
索引

戻る 次へ

7 SQL*PlusからのHTMLレポートの生成

この章では、問合せ結果を含むHTMLレポートの生成方法について説明します。ここでは、次の項目について説明します。

SQL*Plusコマンドラインを使用したレポートの作成

プレーン・テキスト出力およびSQL*Plusコマンドライン・ユーザー・インタフェースを使用すると、完全なWebページまたはWebページに埋め込まれるHTML出力を生成できます。SQLPLUS -MARKUP HTML ONまたはSET MARKUP HTML ON SPOOL ONを使用して、<HTML>および<BODY>タグが自動的に埋め込まれる完全なHTMLページを生成できます。

デフォルトでは、MARKUP HTML ONを使用して取得されたデータはHTML形式で出力されます。ただし、オプションで、HTMLの<PRE>タグに直接出力して、SQL*Plusで表示される形式と同様にWebブラウザで表示できます。これらのコマンドの詳細は、「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セッション中、SET MARKUPコマンドを対話形式で使用して、HTMLをスプール・ファイルに書き出します。出力結果はWebブラウザで表示できます。

SET MARKUP HTML ON SPOOL ONでは、SQL*Plusの出力をHTML形式にエンコードすることを指定するのみで、出力ファイルの作成またはファイルへの書出しの開始は実行しません。スプール・ファイルの生成を開始するには、SQL*PlusのSPOOLコマンドを使用する必要があります。このファイルには、<HTML>タグ、<BODY>タグなどのHTMLタグが含まれます。

HTMLファイルを作成する場合は、HTMLファイルの標準ファイル拡張子である.htmlまたは.htmを指定します。これによって、出力ファイルの種類を簡単に識別でき、また、WebブラウザでHTMLファイルを認識し、正しく表示することができます。拡張子を指定しない場合は、SQL*Plusのデフォルトのファイル拡張子が使用されます。

スプール・ファイルに最終的なHTMLタグを追加してファイルを閉じるには、SPOOL OFFまたはEXITを使用します。SPOOL filenameコマンドを入力すると、SPOOL OFFまたはEXITでは、現行のスプール・ファイルが閉じられ、指定した名前の新しいHTMLのスプール・ファイルが作成されます。

SET MARKUPコマンドを使用すると、必要に応じてHTML出力をONまたはOFFにできます。

例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を開くと、次のように表示されます。


画像の説明

この例では、プロンプトおよび問合せSQL文は非表示にされていません。スクリプトの起動方法によって、SET ECHO OFFまたはコマンドライン -SILENTオプションを使用すると、非表示にできます。

この例のSQL*Plusコマンドには、使用方法に関する項目が含まれています。

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&gt; SELECT '&lt;A HREF=&quot;http://oracle.com/'
||DEPARTMENT_NAME||'.html&quot;&gt;'||DEPARTMENT_NAME
||'&lt;/A&gt;' DEPARTMENT_NAME, CITY
<br>
  2  FROM EMP_DETAILS_VIEW
<br>
  3* WHERE SALARY&gt;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&gt; spool off
<br>
</body>
</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パスワードの入力を求めるプロンプトを表示させ、TABLEにBORDER属性を設定して、スクリプトdepart.sqlを実行します。depart.sqlからの出力は、この場合では、オペレーティング・システム・コマンド「>」(オペレーティング・システムによって異なる場合があります)を使用してdepart.htmlファイルにリダイレクトされた完全なWebページです。SQL*PlusがWebサーバーのCGIスクリプトでコールされた場合は、Webブラウザに送信されます。CGIスクリプトからのSQL*Plusのコールについては、「レポートでのSQL*Plusコマンドの非表示」を参照してください。

Webブラウザを起動し、適切なURLを入力してdepart.htmlを開きます。


画像の説明

この例のSQLPLUSコマンドには、ネストした引用符による3つのレイヤーが含まれています。レイヤーには、内側から順に次のものがあります。

引用符のネスト方法は、オペレーティング・システムやプログラム・スクリプト言語によって異なります。

レポートでのSQL*Plusコマンドの非表示

CGIスクリプトまたはオペレーティング・システム・スクリプトを使用して、埋込み型のSQL*Plusレポートを生成する場合、SQLPLUSの-SILENTオプションを-MARKUPと組み合せて使用すると有効です。これによって、SQL*PlusコマンドおよびSQL*Plusバナーを非表示にできます。HTML出力には、SQL問合せの結果データのみが表示されます。

STARTコマンドで実行されたスクリプト内の各コマンドを非表示にするには、SET ECHO OFFも使用できます。

HTMLエンティティ

一部の文字(「<」、「>」、「"」および「&」)は、HTMLで意味が事前定義されています。前述の例では、SET MARKUP HTML ONコマンドが入力されると、すぐに「>」の文字が「&gt;」で置き換えられています。これらの文字をWebブラウザで表示できるようにするために、HTMLには代替文字のエンティティがあります。

表7-1    対応するHTMLエンティティ 
文字  HTMLエンティティ  意味 

&lt; 

HTMLタグ・ラベルの開始 

&gt; 

HTMLタグ・ラベルの終了 

&quot; 

二重引用符 

&amp; 

アンパサンド 

Webブラウザには「>」が表示されますが、エンコードされたHTMLファイルでの実際のテキストは、HTMLエンティティの「&gt;」です。SET MARKUPオプションのENTMAPは、HTMLエンティティの置換を指定します。ENTMAPは、デフォルトでONに設定されています。デフォルトでは、「<」、「>」、「"」および「&」は、常にその文字を表すHTMLエンティティに置換されます。これによって、SQL*Plusコマンドまたは問合せ結果のデータにこれらの文字が存在した場合でも、Webブラウザが誤った解釈をしなくなります。

グローバル・レベルでSET MARKUP HTML ENTMAP ONを使用するか、または列レベルでCOLUMN column_name ENTMAP ONを使用して、ENTMAPを設定できます。

iSQL*Plusを使用したレポートの作成

スクリプトを実行する要求をURLからiSQL*Plusに送信すると、動的レポートを作成し、変数をスクリプトに渡すことができます。スクリプトは、HTTP POSTプロトコルを使用してアンロードし、HTTPまたはFTPを介して使用できるようにする必要があります。iSQL*Plusでは、HTML形式のフィールド値がパラメータとして使用されてスクリプトが実行され、その結果が新しいWebブラウザ・ウィンドウに戻されます。

置換変数および次に示すコマンドの未定義の値の入力を求めるプロンプトが表示されます。

iSQL*Plusでは、PAUSEコマンドが実行されると、スクリプトの実行が一時停止して「次のページ」ボタンが表示されます。スクリプトを続行するには、「次のページ」ボタンを選択します。

動的レポートの出力は、複数ページまたは単一のページとして表示できます。デフォルトは、24行のページで構成される複数ページの出力です。動的レポートの出力を単一ページまたは複数ページに設定するには、SET PAGESIZEコマンドおよびSET PAUSEコマンドをスクリプトに使用します。たとえば、次のように入力します。

動的レポートの出力を単一ページに設定するには、次のように設定します。

SET PAUSE OFF

動的レポートの出力を40行で複数ページに設定するには、次のように設定します。

SET PAUSE ON

SET PAGESIZE 40

要求には、ユーザー名およびパスワードの情報を含めることができます。ただし、セキュリティ上の理由から、パスワードはプレーン・テキストで指定しないことをお薦めします。スクリプトを実行する場合は、常にパスワードを入力するように求められます。

SET MARKUPコマンドを使用して、レポート用のHEADまたはBODYオプションを変更する場合は、出力を生成する最初のコマンドの前にSET MARKUPコマンドを配置します。

次の例には、人事管理(HR)サンプル・スキーマのEMP_DETAILS_VIEWビューを使用します。このスキーマには、架空の会社の人事記録が含まれています。このスキーマは、Oracleデータベース・コンフィギュレーション・アシスタントを使用すると、デフォルトのOracleデータベース・インストールの一部としてインストールできます。

Oracleデータベースに付属するサンプル・スキーマの詳細は、『Oracle Databaseサンプル・スキーマ』を参照してください。

例7-3    動的レポートの作成

次のスクリプトを作成し、script.sqlというファイル名でアプリケーション・サーバーに保存します。

SET PAGESIZE 200
SELECT *
FROM EMP_DETAILS_VIEW
ORDER BY LAST_NAME, EMPLOYEE_ID
/

次の内容を含むHTMLファイルを作成します。

<HTML>
<HEAD>
<TITLE>iSQL*Plus Dynamic Report</TITLE>
</HEAD>
<BODY>
<H1><em>i</em>SQL*Plus Report</H1>
<A HREF="http://machine_name.domain:port/isqlplus/dynamic?script=http://machine_
name.domain:port/script.sql">
Run Employee Report</A> </BODY> </HTML>

machine_name.domainをホスト名およびドメイン名で置き換え、portをアプリケーション・サーバーのポート番号で置き換えます。このHTMLファイルをアプリケーション・サーバーに保存します。

WebブラウザにHTMLファイルをロードし、「Run Employee Report」をクリックします。iSQL*Plusで、ユーザー名およびパスワードが要求されます。iSQL*Plusにログインします。iSQL*Plusでスクリプトが実行され、その結果がWebブラウザに表示されます。

例7-4    パラメータを含む動的レポートの作成

次のスクリプトを作成し、employee_name.sqlというファイル名でアプリケーション・サーバーに保存します。

SET VERIFY OFF
SET PAGESIZE 200
SET FEEDBACK OFF
SET MARKUP HTML ENTMAP OFF
PROMPT <H1>Employee Details for Employee(s) with Last Name like &last_name%</H1>
SET MARKUP HTML ENTMAP ON
SELECT *
FROM EMPLOYEES
WHERE UPPER(last_name) LIKE UPPER('&last_name%')
/

次の内容を含むHTMLファイルを作成します。

<HTML>
<HEAD>
<TITLE>iSQL*Plus Dynamic Report</TITLE>
</HEAD>
<BODY>
<H1><em>i</em>SQL*Plus Report</H1>
<H2>Query by Last Name</H2>
<FORM METHOD=get ACTION="http://machine_name.domain:port/isqlplus/dynamic">
<INPUT TYPE="hidden" NAME="script" VALUE="http://machine_name.domain:port/employee_
name.sql">
Enter last name of employee: <INPUT TYPE="text" NAME="last_name" SIZE="20">
<INPUT TYPE="submit" VALUE="Run Report">
</FORM>
</BODY>
</HTML>

INPUT TYPEの名前は、スクリプト内の列または置換変数と同じにします。次に例を示します。

<INPUT TYPE="text" NAME="last_name" SIZE="20">

この例では、employee_name.sqlスクリプト内の置換変数&last_nameにマップします。

machine_name.domainをホスト名およびドメイン名で置き換え、portをアプリケーション・サーバーのiSQL*Plusのポート番号で置き換えます。このHTMLファイルをアプリケーション・サーバーに保存します。

HTMLファイルをWebブラウザにロードします。テキスト・フィールドに名前または名前の一部を入力します。たとえば、「Fay」と入力します。「Run Report」ボタンをクリックします。iSQL*Plusでスクリプトが実行され、その結果がWebブラウザに表示されます。

例7-5    パラメータおよびログインの詳細を含む動的レポートの作成

次のスクリプトを作成し、employee_id.sqlというファイル名でアプリケーション・サーバーに保存します。

SET VERIFY OFF
SET PAGESIZE 200
SET MARKUP HTML ENTMAP OFF
PROMPT <H1>Employee Details for Employee Number &eid</H1>
SET MARKUP HTML ENTMAP ON
SELECT *
FROM EMPLOYEES
WHERE EMPLOYEE_ID = &eid
/

次の内容を含むHTMLファイルを作成します。

<HTML>
<HEAD>
<TITLE>iSQL*Plus Dynamic Report</TITLE>
</HEAD>
<BODY>
<H1><em>i</em>SQL*Plus Report</H1>
<H2>Query by Employee ID</H2>
<FORM METHOD=get ACTION="http://machine_name.domain:port/isqlplus/dynamic">
<INPUT TYPE="hidden" NAME="userid" VALUE="hr">
<INPUT TYPE="hidden" NAME="script" VALUE="http://machine_name.domain:port/employee_
id.sql">
Enter employee identification number: <INPUT TYPE="text" NAME="eid" SIZE="10">
<INPUT TYPE="submit" VALUE="Run Report">
</FORM>
</BODY>
</HTML>

machine_name.domainをホスト名およびドメイン名で置き換え、portをアプリケーション・サーバーのiSQL*Plusポート番号で置き換え、hrを有効なユーザーIDで置き換えます。このHTMLファイルをアプリケーション・サーバーに保存します。

HTMLファイルをWebブラウザにロードします。テキスト・フィールドに従業員識別番号を入力します。たとえば、「105」のように入力します。「Run Report」ボタンをクリックします。iSQL*Plusでスクリプトが実行され、パスワードの入力が求められ、結果がWebブラウザに表示されます。

例7-6    動的レポートへの接続識別子の引き渡し

次の内容を含むHTMLファイルを作成します。

<HTML><HEAD><TITLE>iSQL*Plus Report</TITLE>
</HEAD><BODY> 
<H1><i>i</i>SQL*Plus Report</H1> 
<H2>Search for an Employee</H2> 
<FORM METHOD=get ACTION="http://machine_name.domain:port/isqlplus"> 
<p> 
<INPUT TYPE="hidden" NAME="userid" VALUE="hr@ora901"> 
<INPUT TYPE="hidden" NAME="script" 
VALUE="http://machine_name.domain:port/employee_id.sql"> 
Enter the employee's identification number: 
<INPUT TYPE="text" NAME="eid" SIZE="10" value="105"> 
<INPUT TYPE="submit" VALUE="Search"> 
</p> 
</FORM></BODY></HTML>

machine_name.domainをホスト名およびドメイン名で置き換え、portをアプリケーション・サーバーのポート番号で置き換えます。このHTMLファイルをアプリケーション・サーバーに保存します。

接続識別子(この例ではora91)は、useridのINPUTフィールドに含める必要があります。ご使用のiSQL*Plusサーバーのtnsnames.oraファイルに、この識別子を定義してください。


戻る 次へ
Oracle
Copyright © 2005 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引