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