zoukankan      html  css  js  c++  java
  • [转]对于非数据库字段的查询过滤以及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

  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/Cqiang/p/2868314.html
Copyright © 2011-2022 走看看