33 XSQLページ・リファレンス
XSQLページ・フレームワークに関する参照情報を示します。
「XSQL構成ファイルのパラメータ」では、XSQL構成ファイルの設定について説明します。表33-1に、XSQLページの有効な組込みアクションを示します。
表33-1 組込みXSQLアクション・ハンドラ要素およびアクション・ハンドラ・クラス
XSQLアクション要素 | oracle.xml.xsql.actionsのハンドラ・クラス | 用途 |
---|---|---|
<xsql:action> |
|
Javaに実装されたユーザー定義のアクション・ハンドラを起動し、カスタム・ロジックを実行して、カスタムExtensible Markup Language (XML)データをXSQLページに挿入します。 |
<xsql:delete-request> |
|
リクエストで指定されたポスト済XML文書に基づいて、データベース内の既存の行を削除します。 |
<xsql:dml> |
|
Structured Query Language (SQL)データ操作言語(DML)文またはProcedural Language/Structured Query Language (PL/SQL)無名ブロックを実行します。 |
<xsql:if-param> |
|
XMLコンテンツまたは他のXSQLアクションを条件付きで挿入します。 |
<xsql:include-owa> |
|
データベース内でOracle Web Agent(OWA)パッケージを使用してXMLを生成するストアド・プロシージャの結果を挿入します。 |
<xsql:include-param> |
|
パラメータおよびその値を要素としてXSQLページに挿入します。 |
<xsql:include-posted-include-posted> |
|
リクエストでポストされたXML文書をXSQLページに挿入します。 |
<xsql:include-request-params> |
|
すべてのリクエスト・パラメータをXML要素としてXSQLページに挿入します。 |
<xsql:include-xml> |
|
相対URLまたは絶対URLを使用して、任意のXMLリソースをページの任意の場所に挿入します。 |
<xsql:include-xsql> |
|
XSQLページの結果を別のXSQLページの任意の場所に挿入します。 |
<xsql:insert-param> |
|
単一のパラメータの値に含まれるXML文書を挿入します。 |
<xsql:insert-request> |
|
リクエストでポストされたXML文書またはHTMLフォームを表またはビューに挿入します。 |
<xsql:query> |
|
任意のSQL文を実行し、その結果を正規のXML形式に挿入します。 |
<xsql:ref-cursor-function> |
|
PL/SQLストアド・ファンクションが戻すカーソルの結果セットの正規のXML表示を挿入します。 |
<xsql:set-cookie> |
|
HTTP Cookieを設定します。 |
<xsql:set-page-param> |
|
HTTPセッション・レベルのパラメータを設定します。ページの後続のSQL文内で参照できるページ・レベル(ローカル)のパラメータを設定します。 |
<xsql:set-session-param> |
|
HTTPセッション・レベルのパラメータを設定します。 |
<xsql:set-stylesheet-param> |
|
最上位レベルのExtensible Stylesheet Language Transformation (XSLT)パラメータの値を設定します。 |
<xsql:update-request> |
|
リクエストで指定されたポスト済XML文書に基づいて、データベース内の既存の行を更新します。 |
33.1 XSQL構成ファイルのパラメータ
XSQL構成ファイルを使用して、XSQLページ環境をチューニングできます。使用可能な構成設定について説明します。
表33-2 XSQL構成ファイルの設定
構成設定名 | 説明 |
---|---|
|
バッファ付き出力ストリーム・サイズ(バイト単位)を設定します。サーブレット・エンジンがすでにI/Oをサーブレット出力ストリームにバッファリング済である場合は、 |
|
XSQLサーブレットは、リクエストへ戻されるリソースのMultipurpose Internet Mail Extensions (MIME)タイプを示すようHTTP |
注意: 設定名は単一行です。スペースの制約により、2行に表示されています。 |
デフォルトでは、HTTPパラメータの値に基づいてキャラクタ・セット変換が行われ、ほぼすべてのサーブレット・エンジンが使用するデフォルトのキャラクタ・セットを補完します。変換に使用されるデフォルトのベース・キャラクタ・セットは、Internet Assigned Numbers Authority (IANA)の キャラクタ・セット変換を抑制するには、 有効値は、すべてのJavaキャラクタ・セット名または |
|
XSQL Page Processorを起動すると、接続定義が初期化されます。 |
|
SQL問合せを使用して情報を取得するための行のフェッチ・サイズのデフォルト値を設定します。この設定は、Oracle JDBC Driverを使用している場合にのみ有効です。それ以外の場合は無視されます。この方法により、異なる層で実行中のサーブレット・エンジンからデータベースへのネットワーク・ラウンドトリップが削減されます。 デフォルトは |
|
XSQLページ・テンプレート用のキャッシュ・サイズを設定します。この設定は、キャッシュされるXSQLページの最大数を決定します。この最大数を超えると、最も使用頻度の少ないページがキャッシュから削除されます。デフォルトは |
|
XSLTスタイルシート用のキャッシュ・サイズを設定します。この設定は、キャッシュされるXSQLページの最大数を決定します。この最大数を超えると、最も使用頻度の少ないページがキャッシュから削除されます。デフォルトは |
|
キャッシュされた各スタイルシートは、スループットを改善するためにキャッシュされたスタイルシート・インスタンスのプールです。この構成設定は、各スタイルシート・プールに対するスタイルシートの初期割当て数を設定します。 デフォルトは |
|
サーバー上でのロードが増加したためスタイルシート・プールを拡大する必要がある場合に割り当てるスタイルシートの数を設定します。 デフォルトは |
|
プールが縮小して初期サイズに戻ろうとするときに、プール内のスタイルシート・インスタンスが削除され、リソースが解放される前の非活動時間(秒)を設定します。 デフォルトは |
|
各接続プールに対するJava Database Connectivity (JDBC)接続の初期割当て数を制御します。XSQL Page ProcessorのデフォルトのConnection Managerは、接続プーリングを実装して、スループットを改善します。 デフォルトは |
|
サーバー上でのロードが増加したため接続プールを拡大する必要がある場合に割り当てる接続の数を設定します。 デフォルトは |
|
プールが縮小して初期サイズに戻ろうとするときに、プール内のJDBC接続が削除され、リソースが解放される前の非活動時間(秒)を設定します。 デフォルトは |
|
デフォルトは |
|
XSQL Connection Managerファクトリ実装の完全修飾Javaクラス名を指定します。指定しない場合、デフォルトは 有効値は、 |
|
|
|
XSQL Page Processorが 有効値は、 |
|
XSQL Page Processorがページ内の、アクションの処理に必要な経過時間(秒)を報告するコンテンツを持つアクション・ハンドラ要素のすぐ前にコメントを追加するかどうかを決定します。 有効値は、 |
|
カスタムXSQLログ出力ファクトリ実装の完全修飾Javaクラス名を指定します。値を設定しない場合は、ログは出力されません。 有効値は、 |
|
カスタムXSQLエラー・ハンドラの完全修飾Javaクラス名を指定します。指定したハンドラがデフォルトのエラー・ハンドラ実装になります。値を設定しない場合は、デフォルトのエラー・ハンドラが使用されます。 有効値は、 |
|
XSQLページおよびXSLTスタイルシートの解析時に、XSQL Page Processorで空白を保持するかどうかを決定します。 有効な値は、 |
注意: 設定名は単一行です。スペースの制約により、2行に表示されています。 |
クライアントによるスタイルシートのオーバーライドを禁止します。有効値は、 開発中は、
この設定で指定されるのはデフォルト動作のみです。特定のXSQLページのドキュメント要素に対してこの属性値を明示的に指定すると、その値がこのグローバル・デフォルト値より優先されます。 |
注意: 設定名は単一行です。スペースの制約により、2行に表示されています。 |
XSLTスタイルシートへの絶対URLが構成ファイルに示されているトラステッド・ホストからのものである必要があることを規定します。 XSLTプロセッサは、Java拡張関数をサポートします。通常、XSQLページは相対URLを使用してXSLTスタイルシートを参照します。 |
|
HTTPプロトコルを使用する 有効な値は、ホスト名またはInternet Protocol (IP)アドレスです。 |
|
HTTPプロトコルを使用するURLを処理する場合に使用するHTTPプロキシ・サーバーのポート番号を設定します。 有効値は0(ゼロ)以外の整数です。 |
|
XSQL Page Processorが使用する名前付き接続の短縮名およびJDBCの詳細を定義します。
|
|
現行の接続のユーザー名を定義します。 |
|
現行の接続のパスワードを定義します。 |
|
現行の接続のJDBC接続URLを定義します。 |
|
現行の接続に使用するJDBCドライバの完全修飾Javaクラス名を指定します。値を指定しない場合は、デフォルトで |
|
現行の接続の自動コミット・フラグを明示的に設定します。値を指定しない場合、接続はJDBCドライバの自動コミットのデフォルト設定を使用します。 |
|
名前付きカスタム・シリアライザの実装を定義します。 |
|
現行のカスタム・シリアライザ定義の名前を定義します。 |
|
現行のカスタム・シリアライザの完全修飾Javaクラス名を指定します。このクラスは、 |
33.2 <xsql:action>
<xsql:action>
要素について説明します。
用途
Javaに実装されたユーザー定義のアクション・ハンドラを起動し、カスタム・ロジックを実行して、カスタムXMLデータをXSQLページに挿入します。このアクションで起動するJavaクラスには、oracle.xml.xsql.XSQLActionHandler
インタフェースを実装する必要があります。
<xsql:action>
を使用して、組込みアクション・ハンドラが処理しないタスクを実行する必要があります。カスタム・アクションは、任意のXMLコンテンツをデータ・ページに提供し、任意の処理を実行することができます。
使用上の注意
XSQL Page Processorは、ページ内のアクションを次の方法で処理します。
-
デフォルトのコンストラクタを使用して、アクション・ハンドラ・クラスのインスタンスを作成します。
-
メソッド
init(Element actionElt,XSQLPageRequest context)
をコールして、アクション・ハンドラ要素オブジェクトおよびXSQL Page Processorコンテキストを含むハンドラ・インスタンスを初期化します。 -
メソッド
handleAction (Node result)
を起動して、ハンドラがアクションを処理できるようにします。
構文
このアクションの構文は、次のとおりです。handler
は、単一の必須属性です。この属性の値は、起動するアクションの完全修飾Javaクラス名です。yourpackage
は、Javaパッケージです。YourCustomHandler
は、Javaクラスです。
<xsql:action handler="yourpackage.YourCustomHandler"/>
一部のアクション・ハンドラでは、テキスト・コンテンツまたは要素コンテンツを<xsql:action>
要素内で使用する必要がある場合があります。その場合は、次のような構文を使用します。
<xsql:action handler="yourpackage.YourCustomHandler">
Some_text
</xsql:action>
次の構文を使用することもできます。
<xsql:action handler="yourpackage.YourCustomHandler"> <some> <other/> <elements/> <here/> </some> </xsql:action>
属性
必須属性はhandler
のみですが、その他にもハンドラに指定可能な属性があります。たとえば、yourpackage.YourCustomHandler
にparam1
およびparam2
という名前の属性が必要である場合、次の構文を使用します。
<xsql:action handler="yourpackage.YourCustomHandler" param1="xxx" param2="yyy">
例
次の例に、myactions.StockQuotes
Javaクラスを起動するXSQLページを示します。これには、symbol
パラメータで渡された記号に対してGoogleから取得した株価情報が挿入されます。このパラメータを指定しない場合、デフォルト・リストが指定されます。
株価情報の取得
<?xml version="1.0"?> <page xmlns:xsql="urn:oracle-xsql"> <xsql:action handler="myactions.StockQuotes" symbols="{@symbol}" symbol="ORCL,SAP,MSFT,IBM"/> </page>
33.3 <xsql:delete-request>
<xsql:delete-request>
要素について説明します。
用途
XML文書またはHTMLフォームからポストされたデータを受け入れ、XML SQL Utility(XSU)を使用して、ターゲット表またはビューから正規の形式のXML文書のコンテンツを削除します。
XSUとXSLTを組み合せると、XML文書を特定の表に対して適切な正規の形式に変換できます。変換後、結果として戻る正規のXMLをXSUで削除できます。特定のデータベース表では、正規のXML形式は、その表に対するSELECT *
問合せからのXML出力の1行によって指定されます。
構文
このアクションの構文は、次のとおりです。table_name
は表名、key
は一意キーとして使用する1つ以上の列のリストです。
<xsql:delete-request table="table_name" key-columns="key"/>
属性
表33-3に、<xsql:delete-request>
アクションに対して使用できるオプションの属性を示します。太字の属性は必須です。
表33-3 <xsql:delete-request>の属性
属性名 | 説明 |
---|---|
table = "string" |
XMLデータの削除に使用する表、ビューまたはシノニムの名前。 |
key-columns = "string string ..." |
空白またはカンマで区切られた1つ以上の列名のリスト。プロセッサは、ポストされたXML文書に指定されたこれらの名前の値によって、削除する既存の行を識別します。 |
transform = "URL" |
削除されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
columns = "string" |
削除されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
commit = "boolean" |
|
commit-batch-size = "integer" |
0(ゼロ)以外の正数である |
date-format = "string" |
削除中のXML内の日付フィールド値を解析するために使用する日付書式マスク。有効値は、 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列 |
例
次の例では、ポストされたXML文書をstyle.xsl
スタイルシートで変換し、departments
表から削除します。departments.department_id
列が削除の主キーです。
行の削除
<?xml version="1.0"?> <xsql:delete-request table="departments" transform="style.xsl" connection="demo" key-columns="department_id" xmlns:xsql="urn:oracle-xsql"/>
33.4 <xsql:dml>
<xsql:dml>
要素について説明します。
用途
DML文またはDDL文、あるいはPL/SQLブロックを実行します。通常は、このタグを使用して、実行またはロールバックする文をまとめて挿入します。
このアクションを使用するには、そのアクションを使用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
使用上の注意
<xsql:dml>
を使用してOUT
変数の位置にパラメータ値をバインドしても、パラメータ値を設定できません。バインディングは、IN
パラメータに対してのみサポートされます。
構文
このアクションの構文は、次のとおりです。DML_DDL_or_PLSQL
は有効なDML文、DDL文、またはPL/SQLブロックのプレースホルダです。
<xsql:dml>
DML_DDL_or_PLSQL
</xsql:dml>
属性
表33-4に、<xsql:dml>
アクションに対して使用できるオプションの属性を示します。
表33-4 <xsql:dml>の属性
属性名 | 説明 |
---|---|
commit = "boolean" |
|
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。これらのパラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
error-statement = "boolean" |
|
例
次の例では、webuser
cookieに保存されているユーザー名をrequest_log
表に挿入します。バインド変数でSQL挿入攻撃から保護します。
表へのユーザー名の挿入
<xsql:dml connection="demo" bind-params="webuser" xmlns:xsql="urn:oracle-xsql"> BEGIN INSERT INTO request_log(page,userid) VALUES( 'somepage.xsql', ? ); COMMIT; END; </xsql:dml>
33.5 <xsql:if-param>
<xsql:if-param>
要素について説明します。
用途
ある条件が真である場合に、ネストされている要素またはアクションを挿入できます。条件が真である場合は、すべてのネストされたXMLコンテンツおよびアクションがページに挿入されます。条件が偽である場合は、ネストされたXMLコンテンツまたはアクションはいずれも挿入されません(したがって、ネストされたアクションは実行されません)。
評価するパラメータ値を指定するには、必要なname
属性を指定します。単純なパラメータの名前と配列パラメータの名前を指定できます。
注意:
テスト対象のパラメータが存在しない場合は、偽と評価されます。
構文
このアクションの構文は、次のとおりです。some_name
は、name
属性の値です。またtest_condition
は、表33-5に示す条件のうちのいずれかです。
<xsql:if-param name="some_name" test_condition> element_or_action </xsql:if-param>
任意のXMLコンテンツまたはXSQLアクション・ハンドラ要素(別の<xsql:if-param>
要素など)を<xsql:if-param>
内でネストできます。
属性
1つ以上のパラメータ値(配列の場合は複数)のテスト方法を指定するために、name
属性の他に表33-5の属性のいずれかを選択する必要があります。その他のXSQLアクションでは、<xsql:if-param>
アクションの属性に、字句置換パラメータ式(たとえば、{@paramName}
)を含めることができます。
表33-5 <xsql:if-param>の属性
属性名 | 説明 |
---|---|
exists="yes_or_no" |
|
equals="stringValue" |
この条件では、名前付きパラメータと指定された文字列値が等しいかどうかがテストされます。デフォルトでは、文字列が完全一致するかどうかが比較されます。一致の比較で大/小文字を区別しない場合は、 配列値パラメータについては、配列内の任意の要素に指定された値が含まれているかどうかがテストされます。 |
not-equals="stringValue" |
この条件では、名前付きパラメータと指定された文字列値が等しくないかどうかがテストされます。デフォルトでは、文字列が完全一致するかどうかが比較されます。配列値パラメータについては、配列内の要素のいずれにも指定された値が含まれていないときに真と評価されます。 |
in-list = "comma-or-space-separated-list" |
この条件では、名前付きパラメータが指定されたリスト内の文字列のいずれかに一致するかどうかがテストされます。デフォルトでは、文字列が完全一致するかどうかが比較されます。一致の比較で大/小文字を区別しない場合は、 文字列内にカンマが検出された場合、そのカンマはデリミタとして使用され、 |
not-in-list = "comma-or-space-separated-list" |
名前付きパラメータが指定されたリスト内の文字列のいずれかに一致しないかどうかがテストされます。デフォルトでは、文字列が完全一致するかどうかが比較されます。一致の比較で大/小文字を区別しない場合は、 文字列内にカンマが検出された場合、そのカンマはデリミタとして使用され、 |
例
2つの異なる条件がそれぞれ真であるかどうかをテストするには、次の例に示すように<xsql:if-param>
要素をネストして使用します。
条件のテスト
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql"> <!-- | Set page parameter 'some_param' to value "some_value" if parameter 'a' | exists, and if parameter 'b' has a value equal to "X" +--> <xsql:if-param name="a" exists="yes"> <xsql:if-param name="b" equals="X"> <xsql:set-page-param name="some_param" value="some_value"/> </xsql:if-param> </xsql:if-param> <!-- ... --> </page>
33.6 <xsql:include-owa>
<xsql:include-owa>
要素について説明します。
用途
データベース・ストアド・プロシージャによって生成されたXMLコンテンツを挿入します。このアクションを使用するには、そのアクションを使用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
ストアド・プロシージャは、標準のOWAパッケージ(HTP
およびHTF
)を使用して、XMLタグをサーバー側ページ・バッファに出力します。その後、XSQL Page Processorが、動的に生成されたXMLコンテンツをフェッチおよび解析し、データ・ページに挿入します。ストアド・プロシージャは、整形式のXMLページを生成する必要があります。生成しなかった場合は、該当するエラーが表示されます。
使用上の注意
HTPパッケージを使用してXML要素を作成するラッパー・プロシージャを作成できます。XSQLページでは、<xsql:include-owa>
を使用してそのラッパー・プロシージャを起動できます。
構文
このアクションの構文は、次のとおりです。PL/SQL_block
は、HTPまたはHTFパッケージを使用するプロシージャを起動するPL/SQLブロックです。
<xsql:include-owa>
PL/SQL_block
</xsql:include-owa>
属性
表33-6に、このアクションがサポートするオプションの属性を示します。
表33-6 <xsql:include-owa>の属性
属性名 | 説明 |
---|---|
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。これらのパラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
error-statement = "boolean" |
|
例
プロジェクトのステータスを更新する、UpdateStatus
という名前のPL/SQLプロシージャを作成するとします。このプロシージャでは、HTPを使用して<UpdateStatus>
データグラムを出力します。このデータグラムは、エラーが発生しなかった場合は要素<Success/>
を含み、1つ以上のエラーが発生した場合は要素<Success/>
を含みます。
次の例に、XSQLページからUpdateStatus
を起動する方法を示します。この例では、字句置換ではなく、SQLバインド変数を使用して、SQL挿入攻撃を防ぎます。
ストアド・プロシージャで作成したXMLコンテンツの挿入
<xsql:include-owa connection="demo" bind-params="project status" xmlns:xsql="urn:oracle-xsql"> UpdateStatus( ?,? ); </xsql:include-owa>
ユーザーが無効なプロジェクト・ステータス番号をWebベースのフォームに入力するとします。次の例に示すように、このフォームからXSQLページに入力パラメータをポストします。XSQLプロセッサによって次のデータグラムが戻され、このデータグラムはXSLTスタイルシートでHTMLエラー・ページに変換できます。
<UpdateStatus> <Error Field="status">Status must be 1, 2, 3, or 4</Error> </UpdateStatus>
33.7 <xsql:include-param>
<xsql:include-param>
要素について説明します。
用途
1つのパラメータの名前と値のXML表示を挿入します。この方法は、関連付けられたXSLTスタイルシートがXPath式を使用してパラメータ値を参照する必要がある場合に有効です。
構文
このアクションの構文は、次のとおりです。paramname
はパラメータの名前です。
<xsql:include-param name="paramname" />
このname
属性は必須で、値を挿入する必要があるパラメータの名前を指定します。
属性
name
属性は必須で、オプションの属性はありません。
例
次の例では、XPATHを使用してパラメータの値を取得し、XMLで表示します。
パラメータ値のXML表示の挿入
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql" xmlns:p="http://www.companysite.com/products"> <xsql:set-page-param name="productid" xpath="/p:Products/productid"/> <xsql:include-param name="productid"/> </page>
データグラムに挿入するXML文書のフラグメントは次のようになります。
<productid>12345</productid>
次の例のように、配列パラメータ名を使用して、値を配列として処理するように設定できます。
<xsql:include-param name="productid[]"/>
すべての配列値は次の例のようなXML文書のフラグメントによって反映されます。
<productid> <value>12345<value> <value>33455</value> <value>88199</value> </productid>
この配列パラメータ名の使用例のproductid
が単一の値のパラメータである場合、フラグメントは次の例のように単一の要素の配列と同様になります。
<productid> <value>12345<value> </productid>
33.8 <xsql:include-posted-include-posted>
<xsql:dml>
要素について説明します。
用途
ポストされたXML文書をXSQLページに挿入します。XML文書ではなくHTML形式をポストした場合、挿入されるXMLは、<xsql:include-request-params>
アクションによって挿入されるものと類似したものになります。
構文
アクションの構文は次のとおりです。
<xsql:include-posted-xml/>
属性
なし。
例
次の例に、ポストされたXML文書を挿入するサンプルXSQLページを示します。
ポストされたXMLの挿入
<?xml version="1.0"?> <?xml-stylesheet type="text/xsql" href="somepage.xsql"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql"> <xsql:include-posted-xml/> </page>
33.9 <xsql:include-request-params>
<xsql:include-request-params>
要素について説明します。
用途
リクエスト内のすべてのパラメータのXML表示をデータグラムに挿入します。ページのリクエスト時、ページ内のアクション・ハンドラ要素は、リクエストに使用可能なパラメータを示すXML要素のツリーに置き換えられます。
この方法は、関連付けられたXSLTスタイルシートがXPath式を使用してリクエスト・パラメータ値を参照する必要がある場合に有効です。
使用上の注意
XSQLサーブレットを使用してページを処理する場合、挿入されるXMLの形式は次の例のようになります。
リクエスト・パラメータの挿入
<request> <parameters> <paramname>value1</paramname> <ParamName2>value2</ParamName2> ... </parameters> <session> <sessVarName>value1</sessVarName> ... </session> <cookies> <cookieName>value1</cookieName> ... </cookies> </request>
XSQLコマンドライン・ユーティリティまたはXSQLRequest
クラスを使用する場合、XMLの形式は次の例のようになります。
リクエスト・パラメータの挿入
<request> <parameters> <paramname>value1</paramname> <ParamName2>value2</ParamName2> ... </parameters> </request>
この方法では、値が<parameters>
、<session>
または<cookies>
の子要素であるため、リクエスト・パラメータとセッション・パラメータまたはCookieを識別できます。
構文
アクションの構文は次のとおりです。
<xsql:include-request-params/>
属性
なし。
例
次の例に、すべてのリクエスト・パラメータをデータ・ページに挿入するサンプルXSQLページを示します。
リクエスト・パラメータの挿入
<?xml version="1.0"?> <?xml-stylesheet type="text/xsql" href="cookie_condition.xsl"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql"> <xsql:include-request-params/> </page>
cookie_condition.xsl
スタイルシートは、siteuser
Cookieが存在するかどうかに基づいて出力形式を選択します。次の例に、スタイルシートの一部分を示します。
スタイルシートの条件のテスト
<xsl:choose> <xsl:when test="/page/request/cookies/siteuser"> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose>
33.10 <xsql:include-xml>
<xsql:include-xml>
要素について説明します。
用途
ローカル・リソース、リモート・リソースまたはデータベース・ドリブンのXMLリソースのXMLコンテンツをデータグラムに挿入します。リソースは、URLまたはSQL文で指定できます。サーバーは、静的XMLファイルまたはサーブレットやCommon Gateway Interface (CGI)プログラムなどのプログラム・リソースから動的に作成されたXMLの形式でリソースを提供できます。
構文
このアクションの構文は、次のとおりです。URL
は、他のWebサイトからXMLを取得するための相対URLまたはHTTPベースの絶対URLです。
<xsql:include-xml href="URL"/>
または、SQL_statement
に1つのCLOB
列またはVARCHAR2
列の値を含む1つの行を選択するSQL SELECT
文を指定する次の構文も使用できます。
<xsql:include-xml>
SQL_statement
</xsql:include-xml>
href
属性とSQL文は、相互に排他的です。どちらか一方が指定されている場合は、他方を指定できません。
属性
表33-7に、このアクションがサポートする属性を示します。太字の属性は必須です。
表33-7 <xsql:include-xml>の属性
属性名 | 説明 |
---|---|
href="URL" |
挿入するXMLリソースの絶対URL、相対URLまたはパラメータ化されたURL。リソースには静的ファイルの動的ソースを指定できます。 |
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。これらの名前の値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
例
次の例では、データベース問合せにより取得したXML文書を挿入します。このXMLコンテンツは、ユーザー定義型のCLOB
値メンバー・フィールドです。挿入するXMLは、XMLType
ではなく、VARCHAR2
またはCLOB
の列から取得する必要があります。
XML文書の挿入
<?xml version="1.0"?> <xsql:include-xml bind-params="id" connection="demo" xmlns:xsql="urn:oracle-xsql"> SELECT x.document.contents doc FROM xmldoc x WHERE x.docid = ? </xsql:include-xml>
33.11 <xsql:include-xsql>
<xsql:include-xsql>
要素について説明します。
用途
XSQLページのXML出力を別のページに挿入します。オプションで他のXSQLページから変換されたコンテンツを作成するページを作成できます。
使用上の注意
集計されているページに<?xml-stylesheet?>
処理命令が含まれている場合は、結果が集計される前にこのスタイルシートが適用されます。そのため、<xsql:include-xsql>
を使用して、XSLTスタイルシートを連鎖させることができます。
1つのXSQLページが<xsql:include-xsql>
を使用して他のページを集計する場合、ネストしたページはリクエスト・レベルのすべてのパラメータを参照できます。XSQLサーブレットが処理するページでは、セッション・レベルのパラメータおよびCookieを参照できます。集計側のページのプライベート・パラメータは、ネストしたページからは参照できません。
構文
このアクションの構文は、次のとおりです。XSQL_page
は、挿入するXSQLページの相対URLまたは絶対URLです。
<xsql:include-xsql href="XSQL_page"/>
属性
表33-8に、このアクションがサポートする属性を示します。太字の属性は必須です。それ以外の属性はオプションです。
表33-8 <xsql:include-xsql>の属性
属性名 | 説明 |
---|---|
href="string" |
挿入するXSQLページの相対URLまたは絶対URL。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列 |
reparse = "boolean" |
挿入されたXSQLページの出力を挿入前に再解析するかどうかを指定します。有効値は、 この属性は、挿入側のページが要素として処理する必要があるXML文書のフラグメントのテキストを、挿入されたXSQLページが選択している場合に有効です。 |
例
次の例では、ディスカッション・フォーラムのカテゴリを示すXSQLページを表示します。
Categories.xsql
<?xml version="1.0"?> <xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql"> SELECT name FROM categories ORDER BY name </xsql:query>
次の例は、前のCategories.xsqlの例で表示されたページを、現在のフォーラムの最新トピック10件をリストするページに挿入する方法を示しています。
TopTenTopics.xsql
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <top-ten-topics connection="demo" xmlns:xsql="urn:oracle-xsql"> <topics> <xsql:query max-rows="10"> SELECT subject FROM topics ORDER BY last_modified DESC </xsql:query> </topics> <categories> <xsql:include-xsql href="Categories.xsql"/> </categories> </top-ten-topics>
また、<xsql:include-xsql>
を使用して、挿入されたページに対してXSLTスタイルシートを適用することもできます。次のXSLTスタイルシートを作成するとします。
-
cats-as-html.xsl
(HTMLでのトピックのレンダリング用) -
cats-as-wml.xsl
(WMLでのトピックのレンダリング用)
この場合、2つの異なるタイプのデバイスに対応するための1つの方法は、各デバイス用に異なるXSQLページを作成することです。次の例に、Categories.xsql
を集計し、cats-as-html.xsl
スタイルシートを適用するXSQLページを示します。
HTMLCategories.xsql
<?xml version="1.0"?> <!-- HTMLCategories.xsql --> <?xml-stylesheet type="text/xsl" href="cats-as-html.xsl"?> <xsql:include-xsql href="Categories.xsql" xmlns:xsql="urn:oracle-xsql"/>
次の例に、Categories.xsql
を集計し、cats-as-html.xsl
スタイルシートを適用してワイヤレス・デバイスに配信するXSQLページを示します。
WMLCategories.xsql
<?xml version="1.0"?> <!-- WMLCategories.xsql --> <?xml-stylesheet type="text/xsl" href="cats-as-wml.xsl"?> <xsql:include-xsql href="Categories.xsql" xmlns:xsql="urn:oracle-xsql"/>
33.12 <xsql:insert-param>
<xsql:insert-param>
要素について説明します。
用途
パラメータの値を表またはビューに挿入します。このタグは、クライアントが整形式のXML文書をHTTPパラメータまたは個別のHTMLフォーム・フィールドのテキストとしてポストする場合に使用します。
XML SQL Utility(XSU)とXSLTを組み合せると、XMLを特定の表に対して適切な正規の形式に変換できます。変換後、結果として戻る正規のXMLをXSUで挿入できます。特定のデータベース表では、正規のXML形式は、その表に対するSELECT *
問合せからのXML出力の1行によって指定されます。
構文
このアクションの構文は、次のとおりです。table_or_view_name
は、挿入するXSQLページの相対URLまたは絶対URLです。
<xsql:insert-param table="table_or_view_name" name="string"/>
属性
表33-9に、<xsql:insert-param>
アクションに対して使用できるオプションの属性を示します。
表33-9 <xsql:insert-param>の属性
属性名 | 説明 |
---|---|
name="string" |
挿入されるXMLを値に含むパラメータの名前。 |
table="string" |
XMLデータの挿入に使用する表、ビューまたはシノニムの名前。 |
transform = "URL" |
挿入されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
columns = "string" |
値を挿入する1つ以上の列名のリスト。指定する列名は空白またはカンマで区切ります。列名を指定すると、指定された列のみが挿入されます。列名を指定しない場合は、すべての列が挿入され、値がXML文書に表示されない列にはNULL値が指定されます。 |
commit = "boolean" |
|
commit-batch-size = "integer" |
0(ゼロ)以外の正数である |
date-format = "string" |
挿入中のXML内の日付フィールド値を解析するために使用する日付書式マスク。有効値は、 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、 |
例
次の例では、データベースに挿入するHTMLフォーム・パラメータxmlfield
の内容を解析および変換します。
HTMLフォーム・パラメータに含まれるXMLの挿入
<?xml version="1.0"?> <xsql:insert-param name="xmlfield" table="image_metadata_table" transform="field-to-rowset.xsl" connection="demo" xmlns:xsql="urn:oracle-xsql"/>
33.13 <xsql:insert-request>
<xsql:insert-request>
要素について説明します。
用途
XML文書またはHTMLフォームからポストされたデータを受け入れ、XML SQL Utility(XSU)を使用して、ターゲット表またはビューに正規の形式のXML文書のコンテンツを挿入します。
HTMLフォームをポストすると、ポストされたXML文書はHTTPリクエスト・パラメータ、Cookieおよびセッション変数からマテリアライズされます。XML文書は次のとおりです。
<request> <parameters> <param1>value1</param1> : </paramN>valueN</paramN> </parameters> : </request>
XSUとXSLTを組み合せると、XML文書を特定の表に対して適切な正規の形式に変換できます。XSQLエンジンを使用して、結果として戻る正規のXMLがXSUで挿入されます。特定のデータベース表では、正規のXML形式は、その表に対するSELECT *
問合せからのXML出力の1行によって指定されます。
使用上の注意
データベース・ビューをINSERT
のターゲットにする場合、そのビューに対するINSTEAD OF INSERT
トリガーを作成し、ポストされたデータの処理をさらに自動化できます。たとえば、ビューのINSTEAD OF INSERT
トリガーは、PL/SQLを使用してレコードの有無を確認し、その確認結果に応じてINSERT
またはUPDATE
のどちらを実行するかを効果的に選択できます。
構文
このアクションの構文は次のとおりです。
<xsql:insert-request table="table"/>
属性
表33-10に、<xsql:insert-request>
アクションに対して使用できるオプションの属性を示します。
表33-10 <xsql:insert-request>の属性
属性名 | 説明 |
---|---|
table = "string" |
XMLデータの挿入に使用する表、ビューまたはシノニムの名前。 |
transform = "URL" |
挿入されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
columns = "string" |
挿入されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
commit = "boolean" |
|
commit-batch-size = "integer" |
0(ゼロ)以外の正数である |
date-format = "string" |
挿入中のXML内の日付フィールド値を解析するために使用する日付書式マスク。有効値は、 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列 |
例
次の例では、挿入のためにポストされたXML文書またはHTMLフォームのコンテンツを解析および変換します。
パラメータで受け取ったXMLの挿入
<?xml version="1.0"?> <xsql:insert-request table="purchase_order" transform="purchseorder-to-rowset.xsl" connection="demo" xmlns:xsql="urn:oracle-xsql"/>
33.14 <xsql:query>
<xsql:query>
要素について説明します。
用途
SQLのSELECT文を実行し、問合せの結果セットの正規のXML表示をデータ・ページに挿入します。このアクションを使用するには、そのアクションを使用するXSQLページのドキュメント要素にconnection="
connname
"
属性を指定し、データベース接続を指定する必要があります。
構文
アクションの構文は次のとおりです。
<xsql:query>
SELECT_Statement
</xsql:query>
任意の有効なSQLのSELECT文でSELECT_Statement
プレースホルダを置換できます。使用したSELECT文によって行が生成されない場合、次のようにネストした<xsql:no-rows-query>
要素を含めることによって、代替の問合せを作成できます。
<xsql:query> SELECT_Statement <xsql:no-rows-query> Fallback_SELECT_Statement </xsql:no-rows-query> </xsql:query>
<xsql:no-rows-query>
要素自体が、任意のネスト・レベルまでネストした<xsql:no-rows-query>
要素を含むことができます。<xsql:no-rows-query>
に対して使用可能なオプションは、<xsql:query>
アクション・ハンドラ要素の場合と同じです。
属性
表33-11に示すオプションの属性を指定すると、<xsql:query>
アクションによって取得されるデータおよび生成されるXMLを様々な面で制御できます。
表33-11 <xsql:query>の属性
属性名 | 説明 |
---|---|
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。これらのパラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
date-format = "string" |
問合せ中のXML内の書式化された日付列と属性の値に対して使用する日付書式マスク。有効値は |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
error-statement = "boolean" |
|
fetch-size = "integer" |
データベース・ラウンドトリップごとにフェッチするレコードの数。指定しない場合は、 |
id-attribute = "string" |
結果セット内の各行を一意に識別するためのデフォルトの |
id-attribute-column = "string" |
結果セット内の列の大/小文字を区別した名前。この値は、行IDの属性値として各行に指定する必要があります。デフォルトでは、行カウントが行IDの属性値として使用されます。 |
include-schema = "boolean" |
|
max-rows = "integer" |
オプションで |
null-indicator = "boolean" |
|
row-element = "string" |
問合せ結果の |
rowset-element = "string" |
問合せ結果の |
skip-rows = "integer" |
結果セットから行をフェッチする前にスキップする行の数。 |
tag-case = "string" |
有効値は、 |
例
次の例に、単純なXSQLページを示します。
Hello World
<?xml version="1.0"?> <xsql:query connection="xmlbook" xmlns:xsql="urn:oracle-xsql"> SELECT 'Hello, World!' AS text FROM DUAL</xsql:query>
前の例をhello.xsql
という名前で保存し、ブラウザで実行すると、XSQL Page Processorによって次のXMLが戻されます。
<?xml version = '1.0'?> <ROWSET> <ROW num="1"> <TEXT>Hello, World!</TEXT> </ROW> </ROWSET>
デフォルトでは、問合せによって生成されたXMLはその結果セットの列構造を反映し、要素名は列名と一致します。次のようなネストした構造を持つ、結果内の列は、その構造を反映するネストした要素を生成します。
-
オブジェクト型
-
コレクション型
-
CURSOR式
異なる型の列を含み、1行を戻す典型的な問合せの結果は、次の例のようになる場合があります。
ネストした構造の例
<ROWSET> <ROW id="1"> <VARCHARCOL>Value</VARCHARCOL> <NUMBERCOL>12345</NUMBERCOL> <DATECOL>12/10/2001 10:13:22</DATECOL> <OBJECTCOL> <ATTR1>Value</ATTR1> <ATTR2>Value</ATTR2> </OBJECTCOL> <COLLECTIONCOL> <COLLECTIONCOL_ITEM> <ATTR1>Value</ATTR1> <ATTR2>Value</ATTR2> </COLLECTIONCOL_ITEM> <COLLECTIONCOL_ITEM> <ATTR1>Value</ATTR1> <ATTR2>Value</ATTR2> </COLLECTIONCOL_ITEM> </COLLECTIONCOL> <CURSORCOL> <CURSORCOL_ROW> <COL1>Value1</COL1> <COL2>Value2</COL2> </CURSORCOR_ROW> </CURSORCOL> </ROW> </ROWSET>
<ROW>
要素は、結果セット内の行ごとに繰り返されます。問合せで標準SQL列別名を使用して、結果セット内の列の名前を変更できます。これによって、生成されたXML要素の名前も変更されます。列別名は、XML要素には無効な名前を持つ列に対しては必須です。
たとえば、次の例の<xsql:query>
アクションでは、計算された式のデフォルト列名が無効なXML要素名であるため、エラーが発生します。
エラーが発生する問合せ
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql"> SELECT TO_CHAR(hire_date,'DD-MON') FROM employees </xsql:query>
この問題は、次の例のような列別名を使用して解決できます。
列別名を使用した問合せ
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql">
SELECT TO_CHAR(hire_date,'DD-MON') AS hiredate FROM employees
</xsql:query>
33.15 <xsql:ref-cursor-function>
<xsql:ref-cursor-function>
要素について説明します。
用途
REF
CURSOR
を戻す任意のストアド・ファンクションを実行し、問合せの結果セットを正規のXML形式に挿入します。このアクションを使用するには、そのアクションを使用するXSQLページのドキュメント要素にconnection="
connname
"
属性を指定し、データベース接続を指定する必要があります。
このタグは、問合せの内容を指定し、その問合せにカーソルを戻すストアド・プロシージャを起動する場合に使用します。この方法でこのタグを使用すると、問合せを非表示にして、直接参照されないようにすることができるため、軽度のセキュリティが施されます。
構文
このアクションの構文は、次のとおりです。SCHEMA_NAME
はオプションのデータベース・スキーマ名です。PACKAGE_NAME
はオプションのPL/SQLパッケージ名です。FUNCTION_NAME
(必須)は、PL/SQLファンクションの名前です。
<xsql:ref-cursor-function> [SCHEMA_NAME.][PACKAGE_NAME.]FUNCTION_NAME(args); </xsql:ref-cursor-function>
属性
オプションの属性は、<xsql:ref-cursor-function>
でfetch-size
を使用できないことを除き、表33-11に示す<xsql:query>
アクションの属性と同じです。
例
PL/SQLの動的SQL機能を使用すると、結果セットへのカーソル・ハンドルをXSQL Page Processorに戻す前に、ファンクションで条件付きの動的問合せを作成できます。ファンクションの戻り値はREF
CURSOR
型である必要があります。次の例のPL/SQLパッケージについて考えてみます。
DynCursor PL/SQLパッケージ
CREATE OR REPLACE PACKAGE DynCursor IS TYPE ref_cursor IS REF CURSOR; FUNCTION DynamicQuery(id NUMBER) RETURN ref_cursor; END; CREATE OR REPLACE PACKAGE BODY DynCursor IS FUNCTION DynamicQuery(id NUMBER) RETURN ref_cursor IS the_cursor ref_cursor; BEGIN IF id = 1 THEN -- Conditionally return a dynamic query as a REF CURSOR OPEN the_cursor -- An employees Query FOR 'SELECT employee_id, email FROM employees'; ELSE OPEN the_cursor -- A departments Query FOR 'SELECT department_name, department_id FROM departments'; END IF; RETURN the_cursor; END; END;
<xsql:ref-cursor-function>
は、次の例に示すように、このファンクションで戻されたREF
CURSOR
の動的結果を挿入できます。
REF CURSORファンクションの実行
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <xsql:ref-cursor-function connection="demo" xmlns:xsql="urn:oracle-xsql"> DynCursor.DynamicQuery(1); </xsql:ref-cursor-function>
33.16 <xsql:set-cookie>
<xsql:set-cookie>
要素について説明します。
用途
HTTP Cookieの値を設定します。デフォルトでは、Cookieの値は現行のブラウザの存続期間中、存続します。ただし、その存続期間は、オプションのmax-age
属性を指定して変更できます。Cookieに割り当てられる値には、静的テキストと他のパラメータ値を組み合せて指定できます。また、SQLのSELECT
文の結果から指定することもできます。
この機能はHTTPプロトコル固有であるため、このアクションは、それが使用されているXSQLページがXSQLサーブレットによって処理されている場合にのみ有効です。このアクションは、XSQLコマンドライン・ユーティリティまたはXSQLRequest
アプリケーション・プログラミング・インタフェース(API)によって処理されているXSQLページで検出された場合は、何もしません。
使用上の注意
SQL文を使用する方法では、単一行が結果セットからフェッチされ、パラメータに最初の列の値が割り当てられます。この使用方法では、この使用方法を適用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
単一のSQL文の結果に基づいて複数のCookie値を設定する必要がある場合、name
属性を使用しないでください。かわりに、names
属性を使用して、1つ以上のCookie名を空白またはカンマで区切ったリストを指定できます。
構文
このアクションの構文は、次のとおりです。paramname
はパラメータの名前です。
<xsql:set-cookie name="paramname" value="value"/>
または、SQL_statement
にSQLのSELECT
文、paramname
にパラメータの名前を指定する次の構文も使用できます。
<xsql:set-cookie name="paramname"> SQL_statement </xsql:set-cookie>
name
属性またはnames
属性のいずれかが必要です。value
属性と含まれるSQL文は、相互に排他的です。選択リストの列数は、設定されているCookieの数と一致している必要があります。一致していない場合は、エラー・メッセージが戻されます。
属性
表33-12に、このアクションがサポートする属性を示します。太字の属性は必須です。その他はすべてオプションです。
表33-12 <xsql:set-cookie>の属性
属性名 | 説明 |
---|---|
name = "string" |
値を設定するCookieの名前。 |
names = "string string ..." |
値を設定するCookie名を空白またはカンマで区切ったリスト。 |
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
domain = "string" |
Cookieの値が有効で読取り可能なドメイン。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
ignore-empty-value = "boolean" |
Cookieに割当て中の値が空の文字列である場合に、その割当てを無視するかどうかを指定します。有効値は、 |
immediate = "boolean" |
Cookieの割当てを現在のページにすぐに表示するかどうかを指定します。通常、現行のリクエストで設定されたCookieは、ブラウザが後続のリクエストでCookieをサーバーに送信するまでは、表示されません。有効値は、 |
max-age = "integer" |
Cookieの存続期間の最大値(秒)を設定します。デフォルトでは、Cookieが現行ブラウザ・セッションの終了時に期限切れになるように設定されます。 |
only-if-unset = "boolean" |
Cookieが存在しない場合にのみCookieを割り当てるかどうかを指定します。有効値は、 |
path = "string" |
Cookieの値が有効で読取り可能なドメイン内の相対URLパス。パスが明示的に設定されていない場合は、デフォルトで、そのCookieを作成するドキュメントのURLパスに設定されます。 |
value = "string" |
Cookieに割り当てる値を設定します。 |
例
次の例では、HTTP Cookieをchoice
という名前のパラメータの値に設定します。
Cookieへのパラメータ値の設定
<?xml version="1.0"?> <xsql:set-cookie name="last_selection" value="{@choice}" xmlns:xsql="urn:oracle-xsql"/>
表33-5では、HTTP Cookieにデータベースから選択した値を設定します。
Cookieへのデータベースで生成した値の設定
<?xml version="1.0"?> <xsql:set-cookie name="shopping_cart_id" bind-params="user" connection="demo" xmlns:xsql="urn:oracle-xsql"> SELECT cartmgr.new_cart_id(UPPER(?)) FROM DUAL </xsql:set-cookie>
表33-6では、1つのSELECT
文の結果に基づいて3つのCookieを設定します。
3つのCookieの設定
<?xml version="1.0"?> <xsql:set-cookie names="paramname1 paramname2 paramname3" connection="demo" xmlns:xsql="urn:oracle-xsql"> SELECT expression_or_column1, expression_or_column2, expression_or_column3 FROM table WHERE clause_identifying_a_single_row </xsql:set-cookie>
33.17 <xsql:set-page-param>
<xsql:set-page-param>
要素について説明します。
用途
ページのプライベート・パラメータの値を設定します。この値には、静的テキストと他のパラメータ値を組み合せて指定できます。また、別の方法として、SQLのSELECT
文の結果から指定することもできます。
使用上の注意
SQL文を使用する方法では、単一行が結果セットからフェッチされ、パラメータに最初の列の値が割り当てられます。このアクションを使用するには、そのアクションを使用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
value
属性またはSQL文を指定するもう1つの方法として、xpath
属性を指定して、ページ・レベルのパラメータをXPath式の値に設定できます。XPath式は、XSQL Page ProcessorにポストされたXML文書またはHTML形式に対して評価されます。xpath
属性の値には、任意の有効なXPath式を指定できます。オプションで、他のXSQLアクション・ハンドラ要素と同様に、XSQLパラメータを属性値の一部として使用して作成できます。
ページのプライベート・パラメータが設定されると、後続のアクション・ハンドラは、この値を{@po_id}
などの字句パラメータとして使用できます。または、SQL操作をサポートするアクション・ハンドラのbind-params
属性でその名前を参照することによって、SQLバインド・パラメータ値として使用できます。
name
属性を使用するのではなく、単一のSQL文の結果に基づいて複数のセッション・パラメータ値を設定する必要がある場合は、names
属性を使用できます。1つ以上のセッション・パラメータ名を空白またはカンマで区切ったリストを指定できます。
構文
このアクションの構文は、次のとおりです。paramname
はパラメータの名前です。またvalue
は値です。
<xsql:set-page-param name="paramname" value="value"/>
または、SQL_statement
にSQLのSELECT
文、paramname
にパラメータの名前を指定する次の構文も使用できます。
<xsql:set-page-param nname="paramname"> SQL_statement </xsql:set-page-param>
または、paramname
にパラメータの名前、expression
にXPath式を指定する次の構文も使用できます。
<xsql:set-page-param name="paramname" xpath="expression"/>
name
属性またはnames
属性のいずれかが必要です。value
属性と含まれるSQL文は、相互に排他的です。
属性
表33-13に、このアクションがサポートする属性を示します。太字の属性は必須です。その他はすべてオプションです。
表33-13 <xsql:set-page-param>の属性
属性名 | 説明 |
---|---|
name = "string" |
値を設定する、ページのプライベート・パラメータの名前。 |
names = "string string ..." |
値を設定するページ・パラメータ名を空白またはカンマで区切ったリスト。 |
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。これらのパラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
ignore-empty-value = "boolean" |
ページ・レベルのパラメータに割当て中の値が空の文字列である場合に、その割当てを無視するかどうかを指定します。有効値は、 |
quote-array-values = "boolean" |
パラメータ名が単一の値のパラメータ名(たとえば、 |
treat-list-as-array = "boolean" |
パラメータに割り当てられた文字列値を、割当て前に別の値の配列にトークン化するかどうかを指定します。文字列中にカンマが存在する場合、トークンの区切りにそのカンマが使用されます。それ以外の場合は、空白が使用されます。有効値は、 |
value = "string" |
パラメータに割り当てる値を設定します。 |
xpath = "XPathExpression" |
XSQL Page ProcessorにポストされたXML文書またはHTML形式に対して評価されたXPath式に、パラメータの値を設定します。 |
例
次の例では、単一のSQL文の結果に基づいて複数のパラメータ値を設定します。
複数のページ・パラメータの設定
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <xsql:set-page-param names="paramname1 paramname2 paramname3" connection="demo" xmlns:xsql="urn:oracle-xsql> SELECT expression_or_column1, expression_or_column2, expression_or_column3 FROM table WHERE clause_identifying_a_single_row </xsql:set-page-param>
次の例では、ページ・レベルのパラメータにデータベースから選択した値を設定し、xsql:query
属性の値として使用します。
データベースで生成した値のパラメータへの設定
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql"> <xsql:set-page-param name="max-rows-pref"> SELECT max_rows FROM user_profile WHERE userid = {@userid} </xsql:set-page-param> <xsql:query max-rows="{@max-rows-pref}"> SELECT title, url FROM newsstory ORDER BY date_entered DESC </xsql:query> </page>
33.18 <xsql:set-session-param>
<xsql:set-session-param>
要素について説明します。
用途
HTTPセッション・レベルのパラメータの値を設定します。セッション・レベルのパラメータの値は、現行ブラウザ・ユーザーのHTTPセッションの存続期間中、存続します。Webサーバーがセッションを制御します。この値には、静的テキストと他のパラメータ値を組み合せて指定できます。また、SQLのSELECT
文の結果から指定することもできます。
この機能はJavaサーブレットに固有であるため、このアクションは、それが使用されているXSQLページがXSQLサーブレットによって処理されている場合にのみ有効です。このアクションは、XSQLコマンドライン・ユーティリティまたはXSQLRequest
プログラムAPIによって処理されているXSQLページで使用した場合は、何もしません。
使用上の注意
SQL文を使用する方法では、XSQLプロセッサによって単一行が結果セットからフェッチされ、パラメータに最初の列の値が割り当てられます。この使用方法では、この使用方法を適用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
単一のSQL文の結果に基づいて複数のセッション・パラメータ値を設定する場合、name
属性を使用しないでください。かわりに、names
属性を使用して、1つ以上のセッション・パラメータ名を空白またはカンマで区切ったリストを指定できます。
構文
このアクションの構文は、次のとおりです。paramname
はパラメータの名前です。またvalue
は値です。
<xsql:set-session-param name="paramname" value="value"/>
または、SQL_statement
にSQLのSELECT
文、paramname
にパラメータの名前を指定する次の構文も使用できます。
<xsql:set-session-param name="paramname"> SQL_statement </xsql:set-session-param>
name
属性またはnames
属性のいずれかが必要です。value
属性と含まれるSQL文は、相互に排他的です。
属性
表33-14に、このアクションがサポートするオプションの属性を示します。太字の属性は必須です。その他はすべてオプションです。
表33-14 <xsql:set-session-param>の属性
属性名 | 説明 |
---|---|
name = "string" |
値を設定するセッション・レベルの変数の名前。 |
names = "string string ..." |
値を設定するセッション・パラメータ名を空白またはカンマで区切ったリスト。 |
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。パラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
ignore-empty-value = "boolean" |
セッション・レベルのパラメータに割当て中の値が空の文字列である場合に、その割当てを無視するかどうかを指定します。有効値は、 |
only-if-unset = "boolean" |
セッション変数が存在しない場合にのみセッション変数を割り当てるかどうかを指定します。有効値は、 |
quote-array-values = "boolean" |
パラメータ名が単一の値のパラメータ名(たとえば、 |
treat-list-as-array = "boolean" |
パラメータに割り当てられた文字列値を、割当て前に別の値の配列にトークン化するかどうかを指定します。文字列中にカンマが存在する場合、トークンの区切りにそのカンマが使用されます。それ以外の場合は、空白が使用されます。有効値は、 |
value = "string" |
パラメータに割り当てる値を設定します。 |
例
次の例では、単一のSELECT
文の結果に基づいて複数のセッション・パラメータ値を設定します。
セッション・パラメータの設定
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <page connection="demo" xmlns:xsql="urn:oracle-xsql"> <xsql:set-session-param names="paramname1 paramname2 paramname3"> SELECT expression_or_column1, expression_or_column2, expression_or_column3 FROM table WHERE clause_identifying_a_single_row </xsql:set-session-param> <!-- ... --> </page>
33.19 <xsql:set-stylesheet-param>
<xsql:set-stylesheet-param>
要素について説明します。
用途
最上位のXSLTスタイルシート・パラメータの値を設定します。この値には、静的テキストと他のパラメータ値を組み合せて指定できます。また、SQLのSELECT
文の結果から指定することもできます。スタイルシート・パラメータ値は、現行のページの処理中に使用されるすべてのスタイルシートに対して設定できます。
使用上の注意
SQL文を使用する方法では、単一行が結果セットからフェッチされ、パラメータに最初の列の値が割り当てられます。この使用方法では、この使用方法を適用するXSQLページのドキュメント要素にconnection="connname"
属性を指定し、データベース接続を指定する必要があります。
単一のSQL文の結果に基づいて複数のスタイルシート・パラメータ値を設定する場合、name
属性を使用しないでください。かわりに、names
属性を使用して、1つ以上のスタイルシート・パラメータ名を空白またはカンマで区切ったリストを指定できます。
構文
このアクションの構文は、次のとおりです。paramname
はパラメータの名前です。またvalue
は値です。
<xsql:set-stylesheet-param name="paramname" value="value"/>
または、SQL_statement
にSQLのSELECT
文、paramname
にパラメータの名前を指定する次の構文も使用できます。
<xsql:set-stylesheet-param name="paramname">
SQL_statement
</xsql:set-stylesheet-param>
name
属性またはnames
属性のいずれかが必要です。value
属性と含まれるSQL文は、相互に排他的です。
属性
表33-15に、このアクションがサポートするオプションの属性を示します。太字の属性は必須です。その他はすべてオプションです。
表33-15 <xsql:set-stylesheet-param>の属性
属性名 | 説明 |
---|---|
name = "string" |
値を設定する最上位のスタイルシート・パラメータの名前。 |
names = "string string ..." |
値を設定する最上位のスタイルシート・パラメータ名を空白またはカンマで区切ったリスト。 |
bind-params = "string" |
順序付けられ、空白で区切られた1つ以上のXSQLパラメータ名のリスト。パラメータの値は、SQL文内の該当する順序位置にあるJDBCバインド変数にバインドするために使用されます。 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、文字列' |
ignore-empty-value = "boolean" |
スタイルシート・パラメータに割当て中の値が空の文字列である場合に、その割当てを無視するかどうかを指定します。有効値は、 |
value = "string" |
パラメータに割り当てる値を設定します。 |
例
次の例では、スタイルシートを関連付け、<xsql:set-stylesheet-param>
アクション要素を使用して、XSQLページ・パラメータp_table
の値を最上位のXSLTスタイルシート・パラメータtable
に割り当てます。
スタイルシート・パラメータの設定
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <page connname="xmlbook" connection="{@p_connname}"> <xsql:query null-indicator="yes" xmlns:xsql="urn:oracle-xsql"> <![CDATA[ SELECT * FROM {@p_table} WHERE rownum < 2 ]> </xsql:query> <xsql:set-stylesheet-param name="table" value="{@p_table}" xmlns:xsql="urn:oracle-xsql" /> </page>
33.20 <xsql:update-request>
<xsql:update-request>
要素について説明します。
用途
XML文書またはHTMLフォームからポストされたデータを受け入れ、XML SQL Utility(XSU)を使用して、ターゲット表またはビューから正規の形式のXML文書のコンテンツを更新します。
XSUとXSLTを組み合せると、XML文書を特定の表に対して適切な正規の形式に変換できます。変換後、結果として戻る正規のXMLをXSUで更新できます。特定のデータベース表では、正規のXML形式は、その表に対するSELECT *
問合せからのXML出力の1行によって指定されます。
構文
このアクションの構文は次のとおりです。
<xsql:update-request table="table_name"/>
属性
表33-3に、<xsql:update-request>
アクションに対して使用できる属性を示します。太字の属性は必須です。
表33-16 <xsql:update-request>の属性
属性名 | 説明 |
---|---|
table = "string" |
XMLデータの更新に使用する表、ビューまたはシノニムの名前。 |
key_columns = "string string ..." |
空白またはカンマで区切られた1つ以上の列名のリスト。プロセッサは、ポストされたXML文書に指定されたこれらの名前の値によって、更新する既存の行を識別します。 |
transform = "URL" |
更新されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
columns = "string" |
更新されるドキュメントを正規のROWSET/ROW形式に変換するために使用するXSLT変換の相対URLまたは絶対URL。 |
commit = "boolean" |
|
commit-batch-size = "integer" |
0(ゼロ)以外の正数である |
date-format = "string" |
更新中のXML内の日付フィールド値を解析するために使用する日付書式マスク。有効値は、 |
error-param = "string" |
ページのプライベート・パラメータの名前。このアクションの処理中に致命的でないエラーが発生した場合は、 |
例
次の例では、更新のためにポストされたXML文書またはHTMLフォームのコンテンツを解析および変換します。
パラメータで受け取ったXMLの更新
<?xml version="1.0"?> <xsql:update-request table="purchase_order" key-columns="department_id" connection="demo" transform="doc-to-departments.xsl" xmlns:xsql="urn:oracle-xsql/>