FormでのBlockの再クエリ


Formの一部のボタンはPackageを呼び出してテーブルの一部のフィールドを更新する可能性がありますが、データベースのフィールドの変更はformのインタフェースにすぐに反映されませんので、再クエリーを行いますが、ユーザーはクエリーウィンドウを使用してクエリーを行った後、ボタンを押す操作をクリックして、簡単にexecute_を使用するとqueryがクエリーを行うと、元のクエリー条件が消去されます.クエリーのために共通のパッケージが書かれています.
--再execute_queryのデータブロックは次のとおりです.
  PROCEDURE query_block(p_block_name varchar2) is
    l_cursor_block   varchar2(50);
    l_cursor_record  NUMBER;
    l_cursor_item    VARCHAR2(50);
    l_trigger_record NUMBER;
    l_default_where  VARCHAR2(1000);
    l_last_query     VARCHAR2(2000);
    l_where_anchor   NUMBER;
    l_order_anchor   NUMBER;
    l_where_clause   VARCHAR2(1000);
    l_message_level  NUMBER;
  BEGIN
    l_cursor_item    := name_in('SYSTEM.CURSOR_ITEM');
    l_cursor_record  := name_in('SYSTEM.CURSOR_RECORD');
    l_cursor_block   := name_in('SYSTEM.CURSOR_BLOCK');
    l_trigger_record := l_cursor_record;
    l_message_level  := :system.message_level;
    --         。 go_block    
    IF l_cursor_block <> p_block_name THEN
      --    
      l_trigger_record := get_block_property(p_block_name, CURRENT_RECORD);
      go_block(p_block_name);
       IF name_in('SYSTEM.CURSOR_BLOCK') <> p_block_name THEN
        fnd_message.debug('DEVELOPER ERROR :To
          SELECT records ' ||
                          'in another block,
                 you     must be able to navigate');
        RAISE FORM_TRIGGER_FAILURE;
       END IF; --IF name_in('SYSTEM.CURSOR_BLOCK') <> p_block_name THEN
    END IF;--IF l_cursor_block <> p_block_name THEN   
      l_default_where := get_block_property(p_block_name, DEFAULT_WHERE);--          
      l_last_query    := get_block_property(p_block_name, LAST_QUERY);--      
      --      Order By   
    IF instr(upper(l_last_query), 'ORDER BY') = 0 THEN 
       l_order_anchor := length(l_last_query);
    ELSE
      l_order_anchor := instr(upper(l_last_query), 'ORDER BY')-1;
    END IF; --IF instr(upper(l_last_query), 'ORDER BY') = 0 THEN 
    IF instr(upper(l_last_query), 'WHERE') = 0 THEN
      l_where_anchor := l_order_anchor - 5;
    ELSE
      l_where_anchor := instr(upper(l_last_query), 'WHERE') + 1;
    END IF; --IF instr(upper(l_last_query), 'WHERE') = 0 THEN
    --          
    l_where_clause := substr(l_last_query,
                             l_where_anchor + 6,
                             l_order_anchor - l_where_anchor - 5);
    --                                   
    set_block_property(p_block_name, default_where, l_where_clause);
    --      
    :system.message_level := 25;
    --    
    execute_query;
    :system.message_level := l_message_level;
    set_block_property(p_block_name, default_where, l_default_where);
    go_block(p_block_name);
    go_record(l_trigger_record);
    fnd_message.debug('p_block_name'||p_block_name);
    fnd_message.debug('l_trigger_record'||l_trigger_record);
    fnd_message.debug('l_cursor_block'||l_cursor_block);
    fnd_message.debug('l_cursor_record'||l_cursor_record);
    fnd_message.debug('l_cursor_item'||l_cursor_item);    
    go_block(l_cursor_block);
    go_record(l_cursor_record);
    go_item(l_cursor_item);
  END query_block;

プログラムはまず、現在のblock、record、およびItemを保存し、実行後もカーソルがジャンプせずに元の位置にとどまるようにします.現在のBlockとパラメータが入ってくるP_Blockが一致し、一致しなければgoからP_Blockで、BlockのLast_を取得します.Queryは、Order Byを持つクエリがある可能性があるので、Order Byがあるかどうかを判断して切り取りの最終位置を決定する必要があります.where条件を取得したらset_を使用block_property(p_block_name,default_where,l_where_clause)およびexecute_queryはblockをクエリーします.その前に元のdefault whereを保存し、クエリーの後にdefault_を保存する必要があります.whereはデフォルトに設定されています.最後にカーソルを元の位置に合わせます.
呼び出すときにBlock Nameを入力すると、Blockのクエリー条件を切り取ってBlockをクエリーできます.
プログラムはまず、現在のblock、record、およびItemを保存し、実行後もカーソルがジャンプせずに元の位置にとどまるようにします.現在のBlockとパラメータが入ってくるP_Blockが一致し、一致しなければgoからP_Blockで、BlockのLast_を取得します.Queryは、Order Byを持つクエリがある可能性があるので、Order Byがあるかどうかを判断して切り取りの最終位置を決定する必要があります.where条件を取得したらset_を使用block_property(p_block_name,default_where,l_where_clause)およびexecute_queryはblockをクエリーします.その前に元のdefault whereを保存し、クエリーの後にdefault_を保存する必要があります.whereはデフォルトに設定されています.最後にカーソルを元の位置に合わせます.
呼び出すときにBlock Nameを入力すると、Blockのクエリー条件を切り取ってBlockをクエリーできます.
プログラムはまず、現在のblock、record、およびItemを保存し、実行後もカーソルがジャンプせずに元の位置にとどまるようにします.現在のBlockとパラメータが入ってくるP_Blockが一致し、一致しなければgoからP_Blockで、BlockのLast_を取得します.Queryは、Order Byを持つクエリがある可能性があるので、Order Byがあるかどうかを判断して切り取りの最終位置を決定する必要があります.where条件を取得したらset_を使用block_property(p_block_name,default_where,l_where_clause)およびexecute_queryはblockをクエリーします.その前に元のdefault whereを保存し、クエリーの後にdefault_を保存する必要があります.whereはデフォルトに設定されています.最後にカーソルを元の位置に合わせます.
呼び出すときにBlock Nameを入力すると、Blockのクエリー条件を切り取ってBlockをクエリーできます.
 
プログラムはまず、現在のblock、record、およびItemを保存し、実行後もカーソルがジャンプせずに元の位置にとどまるようにします.現在のBlockとパラメータが入ってくるP_Blockが一致し、一致しなければgoからP_Blockで、BlockのLast_を取得します.Queryは、Order Byを持つクエリがある可能性があるので、Order Byがあるかどうかを判断して切り取りの最終位置を決定する必要があります.where条件を取得したらset_を使用block_property(p_block_name,default_where,l_where_clause)およびexecute_queryはblockをクエリーします.その前に元のdefault whereを保存し、クエリーの後にdefault_を保存する必要があります.whereはデフォルトに設定されています.最後にカーソルを元の位置に合わせます.
呼び出すときにBlock Nameを入力すると、Blockのクエリー条件を切り取ってBlockをクエリーできます.