Oracle‎ > ‎Application Express‎ > ‎

情報をページに送る制限を超える

作業用のテキストを作成し、その中に任意のセパレータで区切った値を設定し、次ページへ送信するデータとする。
次ページでは送られてきたデータをPL/SQLで解析しオブジェクトに値をセットすることで送信可能制限を気にせず送信することが可能となる。


例)
REC_KEYSにはREC_ID, SUBJECT_ID, SUBJECT_TYPE, SEQ_NO がピリオドをセパレータとして格納される。


ページの引渡しデータにREC_KEYSを指定する。

受け取り側の計算部にそれぞれの解析用PL/SQLを組み込む。


REC_ID用
DECLARE
  i number;
  ret t3_subject.rec_id%type;
BEGIN
  i:=instr(:P22013_REC_KEYS, '.', 1, 1);
  ret:=to_number(substr(:P22013_REC_KEYS, 1, i-1));
  RETURN ret;
END;

SUBJECT_TYPE用
DECLARE
  i number;
  i2 number;
  ret t3_subject.subject_type%type;
BEGIN
  i:=instr(:P22013_REC_KEYS, '.', 1, 2);
  i2:=instr(:P22013_REC_KEYS, '.', 1, 1);
  ret:=to_number(substr(:P22013_REC_KEYS, i2+1, i-i2-1));
  RETURN ret;
END;

取得するパラメタの位置は赤太字の部分で指定されている。
3つ目のパラメタを取得する場合は以下のようになる。
  i:=instr(:P22013_REC_KEYS, '.', 1, 3);
  i2:=instr(:P22013_REC_KEYS, '.', 1, 2);

注意が必要なのはパラメタのセパレータになる。カンマはAPEX側が誤認してしまうので生データのまま利用することはできない。また、カンマが送信される可能性のあるデータを送信する場合も注意が必要になる。今回はピリオド"."を利用しているが、エスケープするなりセパレータを変更するなりする必要がある。

更新する必要がある場合は「3つ以上のキーで更新処理を実行する方法」を参照願う。
Comments