3 暗黙的パラメータ
この章では、明示的には宣言されない、RESTサービス・ハンドラで使用される暗黙的パラメータについて説明します。Oracle REST Data Services(ORDS)はこれらのパラメータをリソース・ハンドラに自動的に追加します。
3.1 暗黙的パラメータのリスト
次の表では、暗黙的パラメータを示します。
ノート:
パラメータ名では大/小文字が区別されます。たとえば、:CURRENT_USERは有効な暗黙的パラメータではありません。表3-1 暗黙的パラメータのリスト
名前 | 型 | アクセス・モード | HTTPヘッダー | 説明 | 導入 |
---|---|---|---|---|---|
|
BLOB |
IN |
N/A |
リクエストの本文を一時BLOBとして指定します。 |
2.0 |
|
CLOB |
IN |
N/A |
リクエストの本文を一時CLOBとして指定します。 |
18.3 |
:body_json |
CLOB |
IN | N/A | リクエストの本文をJSON形式で一時CLOBとして指定します。 | 24.1 |
|
VARCHAR |
IN |
|
Content-Typeリクエスト・ヘッダーで示されるリクエスト本文のMIMEタイプを指定します。 |
2.0 |
|
VARCHAR |
IN |
N/A |
リクエストの認証済ユーザーを指定します。ユーザーが認証されていない場合、値はnullに設定されます。 |
2.0 |
|
VARCHAR |
OUT |
|
このリクエストのレスポンスを作成するためにOracle REST Data ServicesがGETリクエストを転送する必要がある場所を指定します。 |
18.3 |
|
NUMBER |
IN |
N/A |
ページに表示する最初の行のゼロ基点のオフセットを指定します。 |
18.3 |
|
NUMBER |
IN |
N/A |
ビューに取り込む最大行数を指定します。 |
18.3 |
|
NUMBER |
IN |
N/A |
ページ区切りリクエストのゼロ基点のオフセットを指定します。 ノート: |
2.0 |
|
NUMBER |
IN |
N/A |
ビューに取り込む最大行数を指定します。
|
2.0 |
|
NUMBER |
IN |
N/A |
ページ区切りリクエストで表示する最初の行の1基点の索引を指定します。 |
3.0 |
|
NUMBER |
IN |
N/A |
ページ区切りリクエストで表示する最後の行の1基点の索引を指定します。 |
3.0 |
|
NUMBER |
OUT |
|
リクエストのHTTPステータス・コードを指定します。 |
18.3 |
- 自動バインディングのサポート
- :body_textパラメータについて
- :bodyパラメータについて
- :body_jsonパラメータについて
- :content_typeパラメータについて
- :current_userパラメータについて
- :status_codeパラメータについて
- :forward_locationパラメータについて
- ページ区切り暗黙的パラメータについて
親トピック: 暗黙的パラメータ
3.1.1 自動バインディングのサポート
- 問合せパラメータ
- フォーム・データ
- JSONオブジェクト
:body
、:body_text
および:body_json
暗黙的パラメータがどこでどのように使用されているか- 使用されているメディアタイプまたはMIMEタイプ:
application/x-www-form-urlencoded
application/json
- 単一のファイルがある
multipart/form-data
- 複数のファイルがある
multipart/form-data
例
例3-1 問合せパラメータの自動バインディング
ORDSでは、すべてのコンテンツ・タイプでのPOSTリクエストについて、問合せパラメータの自動バインディングがサポートされています。次のものが該当します:
application/x-www-form-urlencoded
application/json
- 単一のファイルがある
multipart/form-data
- 複数のファイルがある
multipart/form-data
発行されたHTTPリクエストの例:
https://localhost:8443/ords/my_schema/demo/etc?shape=triangle
次のPL/SQLハンドラ・コード例で示すように、値triangle
には、自動バインド:shape
を指定したORDSハンドラでアクセスできます。
Begin
HTP.p('RESULT: ' || :shape);
End;
RESULT: triangle
フォーム・データの自動バインディング
ORDSでは、様々な条件下でPOSTリクエスト本文のフォーム・データの自動バインディングがサポートされています。次の例では、前述の:body_
暗黙的パラメータがないORDSリソース・ハンドラに対して発行されるPOSTリクエストを想定しています。
curl 'https://localhost:8443/ords/my_schema/demo/etc'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-url-encode 'last_name=Ever'
--data-url-encode 'first_name=Greatest'
last_name
およびfirst_name
の値には、自動バインド:last_name
および:first_name
を指定したORDSハンドラでアクセスできます。次のPL/SQLハンドラ・コード例でそれを示します:
BeginHTP.p('Hello: '|| :first_name || :last_name);
End;
Hello: Greatest Ever
JSONオブジェクトの自動バインディング
Content-Type
がapplication/json
タイプである- リソース・ハンドラで次の暗黙的バインド・パラメータが使用されていない:
:body
:body_text
:body_json
curlコマンドの形式で発行されたHTTPリクエスト:
curl 'https://localhost:8443/ords/my_schema/demo/etc'
--header 'Content-Type: application/json'
--data '{username: "clark", "password: "superman1234"}'
username
およびpassword
の値には、自動バインド:username
および:password
を指定したこのORDSハンドラからアクセスできます。次のPL/SQLハンドラ・コード例でそれを示します:
BeginHTP.p('Hello: '|| :username);
Htp.p('Your password: '|| :password);
End;
Hello: clark
Your password: superman1234
親トピック: 暗黙的パラメータのリスト
3.1.2 :body_textパラメータについて
:body_text
暗黙的パラメータは、リクエスト本文のコンテンツを一時CLOBとして受信するためにリソース・ハンドラ内で使用されます。通常、リクエスト本文のコンテンツはテキスト(JSONまたはHTMLコンテンツなど)であるため、リクエスト本文をCLOBとして受け取ることで、リソース・ハンドラの作成者は:body
BLOBパラメータをCLOBインスタンスに変換する必要がなくなります。
ノート:
:body_text
暗黙パラメータは、PL/SQLブロック全体で1回だけ間接参照する必要があります。この値を複数回必要とする場合は、これをローカル変数に割り当て、かわりにローカル変数を間接参照します。
暗黙的なパラメータ:body
または:body_text
のいずれかを使用できます。それ以外の場合は、PL/SQLブロックに、「ストリーム・パラメータが重複しています」というエラー・メッセージが表示されます。
特にPL/SQLブロックでJSONファンクションを使用してリクエスト本体を効率的に処理する場合は、:body
(バイナリ表現)ではなく:body_text
(文字表現)を使用することをお薦めします。
親トピック: 暗黙的パラメータのリスト
3.1.3 :bodyパラメータについて
:body
暗黙的パラメータは、リクエスト本文のコンテンツを一時BLOBとして受信するためにリソース・ハンドラ内で使用されます。
ノート:
POSTリクエストまたはPUTリクエストのみがリクエスト本文を持つことができます。HTTP仕様では、GETリクエストまたはDELETEリクエストでのリクエスト本文の使用は許可されません。例3-2 例
begin
insert into tab (content) values (:body);
end;
ノート:
:body
暗黙的パラメータは、PL/SQLブロック内で一度だけ間接参照されるようにしてください。複数回間接参照された場合、2番目以降の間接参照は空になります。これは、リクエスト本文はクライアントから一度しか送信されないためです。この値を複数回必要とする場合は、これをローカル変数に割り当て、かわりにローカル変数を間接参照します。
暗黙的なパラメータ:body
または:body_text
のいずれかを使用できます。それ以外の場合は、PL/SQLブロックに、「ストリーム・パラメータが重複しています」というエラー・メッセージが表示されます。
:body
または:body_text
を使用する場合は、:bind
表記を使用してリクエストのJSONペイロードの属性を読み取ることはできません。
次の例は、:body
パラメータが2回間接参照されているため、意図したとおりに機能しません。
begin
insert into tab1(content) values (:body); -- request body will be inserted
insert into tab2(content) values (:body); -- an empty blob will be inserted
end;
:body
パラメータの値をローカルPL/SQL変数に割り当てます。これにより、ローカル変数を2回以上間接参照できます。declare
l_content blob := :body;
begin
insert into tabl(content) values(l_content);
insert into tab2(content) values(l_content);
end;
親トピック: 暗黙的パラメータのリスト
3.1.4 :body_jsonパラメータについて
:body_json
暗黙的パラメータをPOST
リソース・ハンドラとともに使用すると、リクエスト本文の内容をJSONオブジェクトとして受け取ることができます。これにより、リソース・ハンドラでJSONプロパティ(つまり、{"key": "value"}
ペア)を直接参照できるようになります。
また、:body_json
暗黙的パラメータは、フォーム・データと1つ以上のファイルがマルチパートまたはフォーム・データのPOST
リクエストに含まれている場合に使用できます。:body_json
暗黙的パラメータにバインドされたフォーム・データは引き続きJSONオブジェクトとして受け取られ、1つ以上のファイルはORDS.BODY_FILE_COUNT LOOP
ファンクションとORDS.GET_BODY_FILE
プロシージャで処理できます。
:body
および:body_text
暗黙的パラメータと同様に、:body_json
暗黙的パラメータがリソース・ハンドラに含まれている場合は、それを起動して、使用できるようにする必要があります。:body_json
パラメータは、次のいずれかの方法で呼び出すことができます:
DBMS_OUTPUT
パッケージ(dbms_output.put_line(:body_json);
など)- ハイパーテキスト・プロシージャ(
htp
)およびファンクション(htf
)のパッケージ(htp.print(:body_json);
など) :body_json
暗黙的パラメータを変数として割り当てる。たとえば、l_body_json := :body_json;
のようにします
親トピック: 暗黙的パラメータのリスト
3.1.4.1 例
BODY_JSON_DEMO_TABLE表の作成
BODY_JSON_DEMO_TABLE
を、次の属性を指定して作成します:CREATETABLEBODY_JSON_DEMO_TABLE (
ID NUMBER(*, 0)
GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 CACHE 20 )
NOT NULL,
FILE_NAME VARCHAR2(200),
FILE_BODY BLOB,
CONTENT_TYPE VARCHAR2(200),
FILE_VISIBILITY VARCHAR2(10),
SUBMITTED_BY VARCHAR2(200),
SUBMITTED_ON TIMESTAMP DEFAULT SYSTIMESTAMP,
SHAPE VARCHAR2(20)
);
ノート:
FILE_VISIBILITY
、SUBMITTED_BY
、SUBMITTED_ON
などの列は、デモンストレーションの目的でのみ用意されています。
ORDSエンドポイントの作成(リソース・ハンドラ)
ORDSエンドポイントを、次の要件を満たす、次のリソース・ハンドラ・コードを使用して作成します:
- このエンドポイントでは、複数のファイルと、JSON形式でのフォーム・データが想定されています。つまり、
:body_json
暗黙的パラメータを使用します。 ORDS.BODY_FILE_COUNT
ファンクションを、POST
リクエストでファイルの合計数をカウントするために使用します。ORDS.GET_BODY_FILE
プロシージャを、データベース・セッションのファイル名、詳細および内容を現在のメモリーに一時的に格納するために使用します。これにより、ORDSリソース・ハンドラで、単一のPOST
リクエストで複数のファイルを処理できるようになります。
INSERTリソース・ハンドラ・コード
BODY_JSON_DEMO_TABLE
表に対してINSERT
を実行し、様々なHTPプロシージャを使用して結果をユーザー、クライアントまたはアプリケーションに出力します:DECLARE
L_PARAMETER_NAME VARCHAR2(4000);
L_FILE_NAME VARCHAR2(4000);
L_CONTENT_TYPE VARCHAR2(200);
L_FILE_BODY BLOB;
L_BODY_JSON CLOB;
BEGIN
L_BODY_JSON := :BODY_JSON;
HTP.PARAGRAPH;
HTP.PRINT('Submitted by: ' || JSON_VALUE(L_BODY_JSON, '$.submitted_by'));
HTP.BR;
HTP.PARAGRAPH;
HTP.PRINT('File visibility status: ' || JSON_VALUE(L_BODY_JSON, '$.file_visibility'));
HTP.BR;
HTP.PARAGRAPH;
HTP.PRINT('Shape selected: ' || :shape);
FOR i IN 1..ORDS.BODY_FILE_COUNT LOOP
ORDS.GET_BODY_FILE(
P_FILE_INDEX => i,
P_PARAMETER_NAME => L_PARAMETER_NAME,
P_FILE_NAME => L_FILE_NAME,
P_CONTENT_TYPE => L_CONTENT_TYPE,
P_FILE_BLOB => L_FILE_BODY
);
HTP.PARAGRAPH;
HTP.PRINT('Inserted file #' || i || ': ' || L_FILE_NAME);
HTP.BR;
INSERT INTO BODY_JSON_DEMO_TABLE (
FILE_NAME,
FILE_BODY,
CONTENT_TYPE,
FILE_VISIBILITY,
SUBMITTED_BY,
SHAPE
) VALUES ( L_FILE_NAME,
L_FILE_BODY,
L_CONTENT_TYPE,
JSON_VALUE(L_BODY_JSON, '$.submitted_by'),
JSON_VALUE(L_BODY_JSON, '$.file_visibility'),
:shape );
END LOOP;
END;
:body_json暗黙的パラメータのテスト
:body_json
暗黙的パラメータをテストするには、次のcurlコマンドを使用します:ノート:
この例では、どのようにORDS
POST
リソース・ハンドラでオプションで問合せパラメータの自動バインディング(たとえば:shape=triangle
)を使用できるかを示します。curl --location 'https://localhost:8443/ords/ordsdocs/binds/body_json_demo?shape=triangle' \ --form 'files=@"demo-3.sql"' \ --form 'files=@"demo-2.sql"' \ --form 'submitted_by="chris"' \ --form 'file_visibility="public"'
クライアントからのレスポンスは次のようになります:<p> Submitted By: chris <br /> <p> File visibility status: public <br /> <p> Shape: triangle <p> Inserted File: demo-3.sql <br /> <p> Inserted File: demo-2.sql <br />
- PostmanなどのAPIテスト・ツールを使用してテストすることもできます:
テスト結果
前述のテストを実行した後に、ターゲット・データベースに問い合せると、次の更新が示されます:
親トピック: :body_jsonパラメータについて
3.1.5 :content_typeパラメータについて
:content_type
暗黙的パラメータは、リクエストで渡されたContent-Typeリクエスト・ヘッダーの値を提供します。リクエストにContent-Typeヘッダーが存在しない場合、null値が返されます。
親トピック: 暗黙的パラメータのリスト
3.1.6 :current_userパラメータについて
:current_user
暗黙的パラメータは、リクエストで認証されたユーザーの身元を提供します。
ノート:
ユーザー認証が行われないシナリオでは、値はnullに設定されます。たとえば、パブリック・リソースに対するリクエストの場合、値はnullに設定されます。親トピック: 暗黙的パラメータのリスト
3.1.7 :status_codeパラメータについて
:status_code
暗黙的パラメータにより、レスポンスにHTTPステータス・コード値が含まれることをリソース・ハンドラで示すことができます。値は、HTTP仕様ドキュメントで定義されている数値のいずれかである必要があります。
親トピック: 暗黙的パラメータのリスト
3.1.8 :forward_locationパラメータについて
:forward_location
暗黙的パラメータは、PL/SQLベースのリソース・ハンドラがリクエストに対するレスポンスを生成できるようにするためのメカニズムを提供します。
新しいリソースを作成するPOSTリクエストについて考えてみます。通常、REST APIに対するPOSTリクエストのレスポンスには、新しく作成されたリソースの場所(Locationレスポンス・ヘッダー内)と新しいリソースの表現が含まれています。レスポンスにLocationヘッダーが存在することは、指定した場所に対するレスポンスを生成できるGETリソース・ハンドラがあることを示しています。
POSTリソース・ハンドラにロジックを適用するかわりに、既存のGETリソース・ハンドラにタスクを委任して新しいリソースの表現をレスポンスに表示することができます。
次のリソース・ハンドラはPOSTハンドラを定義することで、レスポンスの生成をGETリソース・ハンドラに委任しています。
ords.define_handler(
p_module_name => 'tickets.collection',
p_pattern => '.',
p_method => 'POST',
p_mimes_allowed => 'application/json',
p_source_type => ords.source_type_plsql,
p_source => '
declare
l_owner varchar2(255);
l_payload clob;
l_id number;
begin
l_payload := :body_text;
l_owner := :current_user;
l_id := ticket_api.create_ticket(
p_json_entity => l_payload,
p_author => l_owner
);
:forward_location := ''./'' || l_id;
:status_code := 201;
end;
'
);
-
ords.define_handler
APIを使用して、tickets.collection
という名前の既存のリソース・モジュールにPOSTハンドラを追加しています。 -
値が'.'の
p_pattern
は、POSTハンドラをリソース・モジュールのルート・リソースにバインドする必要があることを示しています。tickets.collection
のベース・パスが/tickets/
の場合、POSTハンドラは/tickets/
URLパスにバインドされます。 -
p_mimes_allowed
の値は、POSTリクエストのContent-Typeヘッダー値がapplication/json
でなければならないことを示しています。 -
p_source_type
値は、POSTハンドラのソースがPL/SQLブロックであることを示しています。 -
p_source
値には、PL/SQLブロックのソースが含まれます。説明:
ノート:
:body_text
暗黙的パラメータがローカル変数に割り当てられているため、複数回の間接参照が可能です。-
POSTリクエストを発行したユーザーの身元は、
:current_user
暗黙的パラメータによって判別されます。 -
このPL/SQLブロックはリクエスト・ペイロードを格納するタスクをPL/SQLパッケージ・レベル・ファンクションに委任しています。PL/SQLブロックにはHTTPリクエストとPL/SQLパッケージの起動をつなぐロジックのみを含める必要があります。
ノート:
すべてのデータ変更操作がPL/SQL APIでラップされている場合、PL/SQLブロックは個別にテストできます。長時間および複雑なPL/SQLブロックはコードがアンチパターンであることを示しており、テストとメンテナンスが困難です。 -
PL/SQLパッケージ・レベル・ファンクションは新しく作成されたリソースのIDを返します。
-
:forward_location
暗黙的パラメータには、'./' || l_id
の値が割り当てられます。たとえば、l_id
の値が4256の場合、:forward_location
の値は/tickets/4256
になります。ORDSは先行するPL/SQLブロックを評価し、
:forward_location
暗黙的パラメータに割り当てられた値をチェックするときに、指定された場所(たとえば、/tickets/4256
)に対してGETリクエストを開始し、GETリクエストから生成されたレスポンスをPOSTリクエストのレスポンスとして返します。また、ORDSは場所レスポンス・ヘッダーをレスポンスに含め、ここに:forward_location
値の完全に解決されたURLを格納します。 -
:status_code
暗黙的パラメータには、HTTPレスポンス・ステータス・コード値が割り当てられます。201(作成済)ステータス・コードは、新しいリソースが作成されたことを示します。この値は、GETリクエストで生成されたステータス・コードを上書きします。
-
親トピック: 暗黙的パラメータのリスト
3.1.9 ページ区切り暗黙的パラメータについて
次の表に、ページ区切り暗黙的パラメータを示します。
ノート:
Oracle REST Data Servicesは、問合せパラメータ、page
、offset
およびlimit
の使用を予約します。前述の問合せパラメータ名のいずれかを使用して、名前付きバインド・パラメータを使用するRESTサービスを定義することはできません。かわりに、RESTサービスでは次の表に示す適切なページ区切り暗黙的パラメータを使用する必要があります。
表3-2 ページ区切り暗黙的パラメータ
名前 | 説明 | ステータス |
---|---|---|
|
ページ区切りリクエストのゼロ基点のページ・オフセットを指定します。 |
非推奨 |
|
Recovery Appliance |
非推奨 |
|
ページ区切りリクエストで表示する最初の行の索引を指定します。 |
お薦めしません |
|
ページ区切りリクエストで表示する最後の行の索引を指定します。 |
お薦めしません |
|
ページに表示する最初の行のゼロ基点の索引を指定します。 |
お薦めします |
|
ビューに取り込む最大行数を指定します。 |
お薦めします |
- :page_offsetパラメータについて
- :page_sizeパラメータについて
- :row_offsetパラメータについて
- :row_countパラメータについて
- :fetch_offsetパラメータについて
- :fetch_sizeパラメータについて
- 自動ページ区切りについて
この項では、自動ページ区切りプロセスについて説明します。 - 手動ページ区切りについて
この項では、手動ページ区切りプロセスについて説明します。
親トピック: 暗黙的パラメータのリスト
3.1.9.1 :page_offsetパラメータについて
:page_offset
暗黙的パラメータは下位互換性のために提供されるため、source_type_query
ソース・タイプのリソース・ハンドラでのみ使用されます。
ノート:
-
source_type_query
ソース・タイプは非推奨です。かわりにsource_type_collection
フィード・パラメータを使用してください。 -
:page_offset
暗黙的パラメータは非推奨です。かわりに:row_offset
暗黙的パラメータを使用してください。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.2 :page_sizeパラメータについて
:page_size
暗黙的パラメータは、ページに取り込む最大行数を指定するために使用されます。:page_size
パラメータは下位互換性のために提供されます。このパラメータは非推奨です。かわりに:fetch_size
暗黙的パラメータを使用してください。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.3 :row_offsetパラメータについて
:row_offset
暗黙的パラメータは、ページに表示する最初の行の数を示します。:row_offset
暗黙的パラメータが使用されるのは、ラッパー・ページ区切り問合せとrow_number()
(Oracle11g以前のリリースで使用される)の両方を使用している場合です。Oracle12c以降のリリースでは、:row_offset
パラメータのかわりに、:fetch_offset
暗黙的パラメータと行制限句を使用することをお薦めします。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.4 :row_countパラメータについて
:row_count
暗黙的パラメータを使用して、ページに表示する行数を指定します。:row_count
値は、:row_offset
とページ区切りサイズの合計の値です。:row_count
暗黙的パラメータは、ラッパー・ページ区切り問合せ(Oracle Database11g以前のリリースで使用されていた)とrow_number()
メソッドを使用してページ区切りを実装する場合に便利です。Oracle Databaseリリース12c以降では、かわりに:fetch_size
パラメータと行制限句を使用することをお薦めします。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.5 :fetch_offsetパラメータについて
:fetch_offset
暗黙的パラメータは、指定されたページに表示する最初の行のゼロ基点のオフセットを示すために使用されます。:fetch_offset
暗黙的パラメータは、Oracle12c以降のリリースで使用が推奨されている行制限句を使用してページ区切りを実装する場合に使用されます。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.6 :fetch_sizeパラメータについて
:fetch_size
暗黙的パラメータは、ページに取り込む最大行数を指定するために使用されます。ORDSでは:fetch_size
の値が常にページ区切りサイズ+1に設定されます。余分な行があるかどうかに基づいて、ORDSは結果に後続のページがあるかどうかを判断します。
ノート:
問合せされた余分な行はページに表示されません。親トピック: ページ区切り暗黙的パラメータについて
3.1.9.7 自動ページ区切りについて
この項では、自動ページ区切りプロセスについて説明します。
source_type_collection_feed
またはsource_type_query
のGETリソース・ハンドラにゼロ以外のページ区切りサイズ(p_items_per_page
)が設定されていて、さらにGETリソース・ハンドラのソースが、前の項で説明した暗黙的ページ区切りパラメータのいずれも間接参照していない場合は、ORDSは問合せをページ区切り句にラップし、リクエストされたページの値のみが含まれるよう問合せ結果を制限します。自動ページ区切りでは、リソース・ハンドラの作成者はページ区切りサイズを指定するだけでよく、リソースのページ区切りに必要な残りの作業はORDSによって自動的に処理されます。
ノート:
すべてのリソース・モジュールにはデフォルトのページ区切りサイズ(p_items_per_page
) 25が設定されています。そのため、デフォルトで自動ページ区切りが有効になります。
親トピック: ページ区切り暗黙的パラメータについて
3.1.9.8 手動ページ区切りについて
この項では、手動のページ区切りプロセスについて説明します。
ノート:
GETリソース・ハンドラ側で必要なページ区切りサイズを指定し、ORDSが暗黙的ページ区切りパラメータで必要な値を正しく計算できるようにする必要があります。例
行制限句を使用した手動ページ区切りの例
次の例は、行制限句を使用して問合せ結果セットをページ区切りするRESTサービスを定義しています。この方法で手動のページ区切りを実装することをお薦めします。
begin
ords.define_service(
p_module_name => 'example.paging',
p_base_path => '/example/',
p_pattern => '/paged',
p_items_per_page => 7,
p_source => 'select * from emp e order by empno desc offset :fetch_offset rows fetch next :fetch_size rows only'
);
commit;
end;
row_number()メソッドを使用した手動ページ区切りの例
次の例は、ラッパー問合せおよびrow_number()
メソッドを使用するRESTサービスを定義しています。このアプローチはお薦めしません。
begin
ords.define_service(
p_module_name => 'example.paging',
p_base_path => '/example/',
p_pattern => '/paged',
p_items_per_page => 7,
p_source => 'select * from (select q_.* , row_number() over (order by 1) rn__ from (select * from emp e order by empno desc) q_ )where rn__ between :row_offset and :row_count'
);
commit;
end;
親トピック: ページ区切り暗黙的パラメータについて