我有一個由多個列組成的數據塊的Oracle Forms 6i表單。如何在動態更改ORDER_BY子句時在Oracle Forms中重複查詢?
------------------------------------------------------------------------------
| FIRST_NAME | LAST_NAME | DEPARTMENT | BIRTH_DATE | JOIN_DATE | RETIRE_DATE |
------------------------------------------------------------------------------
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
------------------------------------------------------------------------------
用戶可以按下F7(在查詢模式下,以輸入,例如,他/她的類型在DEPARTMENT
領域first_name
和H%JOH%),然後F8執行查詢並查看結果。在本例中,將列出所有員工姓名的列表,其姓氏以JOH開頭,並在以H開頭的任何部門工作。下面是查詢
------------------------------------------------------------------------------
| FIRST_NAME | LAST_NAME | DEPARTMENT | BIRTH_DATE | JOIN_DATE | RETIRE_DATE |
------------------------------------------------------------------------------
| MIKE | JOHN | HUMAN RES. | 05-MAY-82 | 02-FEB-95 | |
| BEN | JOHNATHAN | HOUSING | 23-APR-76 | 16-AUG-98 | |
| SMITH | JOHN | HOUSING | 11-DEC-78 | 30-JUL-91 | |
| | | | | | |
------------------------------------------------------------------------------
我然後加入一個小按鈕上每一列的頂部,以允許用戶通過所需的列對數據進行排序,通過執行WHEN-BUTTON-PRESSED
觸發器的輸出樣本:
set_block_property('dept', order_by, 'first_name desc');
好消息是ORDER_BY確實發生了變化。壞消息是,用戶從不會注意到這一更改,因爲他/她需要執行另一個查詢並執行以查看所選列的排序結果。換句話說,用戶只會注意到他/她將執行的下一個查詢中的更改。
我試着在改變ORDER_BY條款這樣可以自動執行查詢:
set_block_property('dept', order_by, 'first_name desc');
go_block('EMPLOYEE');
do_key('EXECUTE_QUERY');
/* EXECUTE_QUERY -- same thing */
,但什麼情況是,表中的所有數據被選擇,忽略了用戶在最初設定的標準查詢模式條目。
我也搜索了這個問題的解決方案,其中大多數處理SYSTEM.LAST_QUERY
和default_where
。問題是,last_query可以引用來自不同形式的不同塊,這對當前顯示的數據塊無效。
如何才能做到在短短的一個按鈕按如下:
1-改變當前的有效數據塊的ORDER_BY
條款
和:2-執行用戶已執行的最後一個查詢,使用相同的標準,設置?
任何幫助將不勝感激。
非常感謝。使用SUBSTR隔離WHERE條件後,解決了我的問題 – Ahmad