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;