[转]对于非数据库字段的查询过滤以及app_query.append的用法
在Form中在查詢的記錄不希望某些記錄顯示出來,例如不需要供應商A被顯示出來,假設供應商A是數據庫項,可以使用
set_block_property(‘block_name’,?DEFAULT_WHERE,?‘VENDOR_NAME <>’ || ‘A’)
但是建議不要使用上述方法,因為Block的Default where一旦被設置了以后,并不是只有本次生效,而是一直生效,也就是當下一次使用Ctrl + F11來進行查詢的時候,實際上,查詢語句的where條件就一直加入了我們手動加進去的查詢語句。所以建議使用app_query.append(用法往下看)來添加復雜的查詢語句。
? ?我們的重點是對非數據字段的查詢,也就是如果供應商為非數據庫項,那么如果在查詢窗口中剛好對供應商有這個查詢條件,該如何去做?
由于供應商字段為非數據庫項,那么只能在post-query中去判斷,例如在post-query中寫道:
If Vendor_name = ‘A’ then
? Raise form_trigger_failure;
End if;
那么供應商A將不會被顯示出來。由于Post-query是在查詢出每條記錄時都執行的,所以raise form_trigger_failure并不影響只是阻止了本觸發器,但是并不是阻止了所有的。
最后要說明的一點是建議還是不要采用這樣的方式,因為這是效率最低的判斷,如果可以使用數據庫項進行查詢,就盡量不要使用這個方法。
app_query.append用法:
在項目在對某個form錯誤檢查時候發現,當使用app_query.append時候,查詢記錄到一定數量時候會報錯:數字或值錯誤。后來在matalink上查找之后發現原來
用 app_query.append時候,where語句里面字節必須<2000,當大于這個字節數就會發生溢出。
因此順便看了一下app_query里面的一些函數,做了如下筆記。
app_query.append ('塊名',user_where_clause):?
在form中,給數據塊查詢添加新的where語句。
????? e.g:? 在pre-query中添加 app_query.append('ORDER', 'oe_order_headers_v.order_type_id <> 1');
在查詢時候限定類型不為一。
app_query.reset('塊名'):
第一次設置查詢條件為 default_where 。在form中由于有安全性的控制,在使用 app_query.append? 的時候會限制用戶添加的where語句長度<=2000字節,
一旦超出2000,則出現溢出,會報錯:數字或者字符出錯,找不到數據......,因此在使用app_query.append之前需要使用 app_query.reset把where語句重
置。
app_query.query_foreign_key(block_name ? ? ? ? ? ?? ?VARCHAR2,
? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?db_field?????????? VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ?non_db_field ? ? ? ? VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? ? ?table_name ? ? ? ? ? ?VARCHAR2,
??? ? ? ? ? ? ? ? ? ? ? ? ? ? id_column ? ? ? ? ? ? VARCHAR2,
???????????????????? ? ? ?name_column??????? VARCHAR2,
? ? ? ? ? ? ? ? ? ? ? ? ?extra_where_clause ? VARCHAR2 ??DEFAULT NULL):
用來給數據庫對應的視圖中的非數據庫項添加子查詢
? 例如:app_query.query_foreign_key('GROUPS', 'APPLICATION_ID', 'APPLICATION_NAME','FND_APPLICATION_VL', 'APPLICATION_ID', 'APPLICATION_NAME');
? ? 添加這樣的語句之后,查詢會增加:application_id? in (select 'APPLICATION from FND_APPLICATION_VL where APPLICATION_NAME
=groups.application_name || extra_where_clause )?
FUNCTION join(clause1 VARCHAR2,? ?clause2 VARCHAR2) :
連接兩個where語句,返回 clause1 and clause2
轉載于:https://www.cnblogs.com/Cqiang/archive/2013/01/20/2868314.html
總結
以上是生活随笔為你收集整理的[转]对于非数据库字段的查询过滤以及app_query.append的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 线程知识--使用Task执行异步操
- 下一篇: Gentoo - X11 forward