Oracle Form表单开发的问题

来源:互联网 发布:万方数据库医学论文 编辑:程序博客网 时间:2024/06/02 00:37

  Oracle Form表单开发的问题(FRM-40831)

       做一个工程用款资金Form,在查询界面可以按日期范围及其他情况
  可以查询,其他字段查询时是正确的,但使用时间查询时会出现以
  下报错:
      “FRM-40831:出现截段:域op_date至太长”,
   资料中显示"FRM-40505: ORACLE 错误: 不能执行查询.
           --------------------------------------------------------------
           ORA-00905: 缺少关键字"
  op_date是我的一张表中的一字段:表结构如下:
 
-- 在CUX表空间中创建数据表
create table CUX.CUX_OLD_PROJECT_ALL
(
  op_newid           Number Not Null,
  op_vendorid        Varchar2(150),                     -- 供应商编码
  op_vendorname      Varchar2(150),                     -- 供应商名称
  op_snnumber        Varchar2(150) Not Null,            -- 申请序号
  op_date            Date,                              -- 申请用款时间
  op_depentment      Varchar2(150),                     -- 申请部门
  op_typename        Varchar(10) Not Null,              -- 月度计划用款
  op_project         Varchar2(150),                     -- 项目
  op_description     Varchar2(150),                     -- 付款内容
  op_types           Varchar2(150),                     -- 支付类型
  op_status          Varchar2(10) Not Null,             -- 合同状态
  op_amount          Number,                            -- 合同金额
  op_amounts         Number,                            -- 合同累计应付款
  op_totals          Number,                            -- 累计已付款
  op_checkamount     Number,                            -- 代缴代扣金
  op_modiamount      Number,                            -- 保修金
  op_amount_non      Number,                            -- 合同未付款
  op_amounts_non     Number,                            -- 合同累计未付款
  op_recamount       Number,                            -- 本月计划用款
  op_memo            Varchar2(150),                     -- 情况说明
  op_okamount        Number,                            -- 批准用款金额
  op_conamount       Number,                            -- 本月实际支付款
 
  ORG_ID             NUMBER default to_number(decode(substrb(userenv('CLIENT_INFO'),1,1),' ',null,substrb(userenv('CLIENT_INFO'),1,10))),
  ATTRIBUTE_CATEGORY VARCHAR2(150),
  ATTRIBUTE1         VARCHAR2(150),
  ATTRIBUTE2         VARCHAR2(150),
  ATTRIBUTE3         VARCHAR2(150),
  ATTRIBUTE4         VARCHAR2(150),
  ATTRIBUTE5         VARCHAR2(150),
  ATTRIBUTE6         VARCHAR2(150),
  ATTRIBUTE7         VARCHAR2(150),
  ATTRIBUTE8         VARCHAR2(150),
  ATTRIBUTE9         VARCHAR2(150),
  ATTRIBUTE10        VARCHAR2(150),
  ATTRIBUTE11        VARCHAR2(150),
  ATTRIBUTE12        VARCHAR2(150),
  ATTRIBUTE13        VARCHAR2(150),
  ATTRIBUTE14        VARCHAR2(150),
  ATTRIBUTE15        VARCHAR2(150),
 
  -- WHO字段
  LAST_UPDATE_DATE   DATE,
  LAST_UPDATED_BY    NUMBER(15),
  CREATION_DATE      DATE,
  CREATED_BY         NUMBER(15),
  LAST_UPDATE_LOGIN  NUMBER(15)
)

  查询的trigger代码入下:             
  procedure find_query(event in varchar2)
   is
  begin
    if (event='PRE-QUERY') then
    -- 查询状态
    if (name_in('parameter.G_Query_Find') = 'TRUE' ) then
      -- 供应商
      if (name_in('CUX_OLD_FIND.VENDOR_ID') is not null) then
          copy(name_in('CUX_OLD_FIND.VENDOR_ID'),'CUX_OLD_PROJECTCASH_V.OP_VENDORID');
      end if;
    
      --合同状态
      if (name_in('CUX_OLD_FIND.OP_STATUS') is not null) then
          copy(name_in('CUX_OLD_FIND.OP_STATUS'),'CUX_OLD_PROJECTCASH_V.OP_STATUS');
      end if;
     
      -- 日期查询
      if (name_in('cux_old_find.date_from1') is not null) then
          if (name_in('cux_old_find.date_to1') is not null) then
             app_find.query_range(:cux_old_find.date_from1,
                          :cux_old_find.date_to1,
               'CUX_OLD_PROJECTCASH_V.OP_DATE');
          else
             app_find.query_range(:cux_old_find.date_from1,
                    sysdate,
                'CUX_OLD_PROJECTCASH_V.OP_DATE');
          end if;
      else
          if (name_in('cux_old_find.date_to1') is not null) then
              app_find.query_range(to_date('1901-01-01','YYYY-MM-DD')
                         :cux_old_find.date_to1,
                  'CUX_OLD_PROJECTCASH_V.OP_DATE');
          end if;
      end if;

      Copy('FALSE', 'parameter.G_Query_Find');
     
    end if;
   end if;
  end find_query;

查过问题后,觉得是属于Oracle的app_find.query_range有问题,经如下解决:

使用:  

   GO_BLOCK('CUX_OLD_PROJECTCASH_V');
   SET_BLOCK_PROPERTY('CUX_OLD_PROJECTCASH_V',DEFAULT_WHERE,var_default_where);
   EXECUTE_QUERY;

抛开app_find.query_range;

原创粉丝点击