--注:用ps/sql工具執行語句
--一合同預算狀態函數
--1.
drop type htjs_business_row
drop type htjs_business_state_row_type
CREATE OR REPLACE type htjs_business_state_row_type as object(bissid VARCHAR2(20),businessState varchar2(50));
CREATE OR REPLACE type htjs_business_row as table of htjs_business_state_row_type;
--2.
CREATE OR REPLACE
function fun_htjs_business_state return htjs_business_row pipelined as
v htjs_business_state_row_type;
businessState VARCHAR2(50);java
bissid bosp_htys_businessreserve.id%type;
isquit bosp_htys_businessreserve.isquit%type;
BUS_STATE bosp_htys_businessreserve.BUS_STATE%type;
formalcensor bosp_htys_receptioninfo.formalcensor%type;
accept_state bosp_htys_receptioninfo.accept_state%type;
substanceresult bosp_htys_backstageinfo.substanceresult%type;
iscomplete bosp_htys_backstageinfo.iscomplete%type;
gather_state bosp_htys_backstageinfo.gather_state%type;
app_state bosp_htjs_contract_report.app_state%type;
back_app_state bosp_htys_backstageinfo.app_state%type;
mortem_state bosp_htys_ysinfo.mortem_state%type;
returnman bosp_htys_businessreserve.returnman%type;
issubmit bosp_htys_backstageinfo.issubmit%type;
begin
for myrow in (
--狀態sql開始
SELECT
biss. ID,
biss.isquit,
biss.BUS_STATE,
rec.formalcensor,
rec.accept_state,
back.substanceresult,
back.iscomplete,
back.gather_state,
back.app_state back_app_state,
bhcreport.app_state,
ys.mortem_state,
biss.returnman,
back.issubmit
FROM
bosp_htys_businessreserve biss
LEFT JOIN bosp_htys_receptioninfo rec ON biss. ID = rec.business_id
LEFT JOIN bosp_htjs_contractinfo con ON con. ID = biss.contractinfo_id
LEFT JOIN bosp_htjs_subengineeringinfo sub ON sub. ID = con.subengineeringinfo_id
LEFT JOIN bosp_htjs_engineeringinfo eng ON eng. ID = sub.engineering_id
LEFT JOIN bosp_global_supplier sup ON con.supplier_id = sup. ID
LEFT JOIN bosp_htys_backstageinfo back ON back.qt_business_id = rec. ID
LEFT JOIN bosp_htys_budget budget ON budget.business_id = biss. ID
LEFT JOIN bosp_htys_monthlygatherinfo bhmgather ON bhmgather.business_id = biss. ID
LEFT JOIN bosp_htjs_contract_report bhcreport ON (
bhmgather.report_id = bhcreport. ID
AND bhcreport.report_type = 2
AND bhcreport.is_del = 0
)
LEFT JOIN bosp_htys_ysinfo ys ON ys.business_id = biss. ID
where biss.business_type IN (1,2,3,4,5,6)
--狀態sql結束
) loop sql
--業務邏輯判斷開始
bissid := myrow.ID;
isquit := myrow.isquit;
BUS_STATE := myrow.BUS_STATE;
formalcensor := myrow.formalcensor;
accept_state := myrow.accept_state;
substanceresult := myrow.substanceresult;
iscomplete := myrow.iscomplete;
gather_state := myrow.gather_state;
app_state := myrow.app_state;
back_app_state := myrow.back_app_state;
mortem_state := myrow.mortem_state;
returnman := myrow.returnman;
issubmit := myrow.issubmit;
dbms_output.put_line(BUS_STATE); app
if BUS_STATE is not null THEN
if BUS_STATE=0 then
businessState := 'dsl';
elsif (BUS_STATE=1 or BUS_STATE=3) then
if formalcensor is null then
businessState := 'dxssc';
elsif formalcensor=0 then
businessState := 'xsscbtg';
elsif formalcensor=1 then
businessState := 'xssctg';
if accept_state=1 then
businessState := 'dszsc';
if mortem_state=4 then
businessState := 'ysth';
end if;
--實審開始
if substanceresult is not null then
if issubmit is not null then
if issubmit=1 then
if substanceresult=0 then
businessState := 'szscbtg';
elsif substanceresult=1 then
businessState := 'szsctg';
if isquit=1 then
if back_app_state is not null then
businessState := 'isquit_money_app_state' || back_app_state;
end if;
else
businessState := 'dbzys';
if iscomplete=1 then
businessState := 'ybzys';
if gather_state=1 then
if app_state is not null then
businessState := 'declare_state' || app_state;
end if;
end if;
end if;
end if;
elsif substanceresult=2 then
businessState := 'qxzz';
end if;
end if;
end if;
end if;
--實審結束
end if;
end if;
elsif BUS_STATE=2 then
businessState := 'thgys';
if formalcensor=0 then
businessState := 'xsscbtg';
end if;
end if;
end if;
--業務邏輯判斷結束
v := htjs_business_state_row_type(bissid,businessState);
pipe row (v);
end loop;
return;
end; xss
--二:測試函數結果集表
select htjs_business_state.* from table(fun_htjs_business_state) htjs_business_state; 函數
--三:建立對應物化視圖
drop materialized view mv_htjs_business_state;
create materialized view mv_htjs_business_state refresh force on demand as select htjs_business_state.* from table(fun_htjs_business_state) htjs_business_state;
--1.查詢語句:
select * from mv_htjs_business_state;工具
--四:調用前手動刷新物化視圖
--1.pl/sql命令刷新:exec dbms_mview.refresh('mv_htjs_business_state');
--2.java中調用:call dbms_mview.refresh('mv_htjs_business_state')";oop
--業務狀態寫法二:
create or replace function fun_htjs_business_state
return htjs_business_row
as
rs htjs_business_row:= htjs_business_row();
businessState VARCHAR2(50);測試
bissid bosp_htys_businessreserve.id%type;
isquit bosp_htys_businessreserve.isquit%type;
BUS_STATE bosp_htys_businessreserve.BUS_STATE%type;
formalcensor bosp_htys_receptioninfo.formalcensor%type;
accept_state bosp_htys_receptioninfo.accept_state%type;
substanceresult bosp_htys_backstageinfo.substanceresult%type;
iscomplete bosp_htys_backstageinfo.iscomplete%type;
gather_state bosp_htys_backstageinfo.gather_state%type;
app_state bosp_htjs_contract_report.app_state%type;
back_app_state bosp_htys_backstageinfo.app_state%type;
mortem_state bosp_htys_ysinfo.mortem_state%type;
returnman bosp_htys_businessreserve.returnman%type;
issubmit bosp_htys_backstageinfo.issubmit%type;
begin
for myrow in(
--狀態sql開始
SELECT
biss. ID,
biss.isquit,
biss.BUS_STATE,
rec.formalcensor,
rec.accept_state,
back.substanceresult,
back.iscomplete,
back.gather_state,
back.app_state back_app_state,
bhcreport.app_state,
ys.mortem_state,
biss.returnman,
back.issubmit
FROM
bosp_htys_businessreserve biss
LEFT JOIN bosp_htys_receptioninfo rec ON biss. ID = rec.business_id
LEFT JOIN bosp_htjs_contractinfo con ON con. ID = biss.contractinfo_id
LEFT JOIN bosp_htjs_subengineeringinfo sub ON sub. ID = con.subengineeringinfo_id
LEFT JOIN bosp_htjs_engineeringinfo eng ON eng. ID = sub.engineering_id
LEFT JOIN bosp_global_supplier sup ON con.supplier_id = sup. ID
LEFT JOIN bosp_htys_backstageinfo back ON back.qt_business_id = rec. ID
LEFT JOIN bosp_htys_budget budget ON budget.business_id = biss. ID
LEFT JOIN bosp_htys_monthlygatherinfo bhmgather ON bhmgather.business_id = biss. ID
LEFT JOIN bosp_htjs_contract_report bhcreport ON (
bhmgather.report_id = bhcreport. ID
AND bhcreport.report_type = 2
AND bhcreport.is_del = 0
)
LEFT JOIN bosp_htys_ysinfo ys ON ys.business_id = biss. ID
where biss.business_type IN (1,2,3,4,5,6)
--狀態sql結束
)
loop
--業務邏輯判斷開始
bissid := myrow.ID;
isquit := myrow.isquit;
BUS_STATE := myrow.BUS_STATE;
formalcensor := myrow.formalcensor;
accept_state := myrow.accept_state;
substanceresult := myrow.substanceresult;
iscomplete := myrow.iscomplete;
gather_state := myrow.gather_state;
app_state := myrow.app_state;
back_app_state := myrow.back_app_state;
mortem_state := myrow.mortem_state;
returnman := myrow.returnman;
issubmit := myrow.issubmit;
dbms_output.put_line(BUS_STATE);
if BUS_STATE is not null THEN
if BUS_STATE=0 then
businessState := 'dsl';
elsif (BUS_STATE=1 or BUS_STATE=3) then
if formalcensor is null then
businessState := 'dxssc';
elsif formalcensor=0 then
businessState := 'xsscbtg';
elsif formalcensor=1 then
businessState := 'xssctg';
if accept_state=1 then
businessState := 'dszsc';
if mortem_state=4 then
businessState := 'ysth';
end if;
--實審開始
if substanceresult is not null then
if issubmit is not null then
if issubmit=1 then
if substanceresult=0 then
businessState := 'szscbtg';
elsif substanceresult=1 then
businessState := 'szsctg';
if isquit=1 then
if back_app_state is not null then
businessState := 'isquit_money_app_state' || back_app_state;
end if;
else
businessState := 'dbzys';
if iscomplete=1 then
businessState := 'ybzys';
if gather_state=1 then
if app_state is not null then
businessState := 'declare_state' || app_state;
end if;
end if;
end if;
end if;
elsif substanceresult=2 then
businessState := 'qxzz';
end if;
end if;
end if;
end if;
--實審結束
end if;
end if;
elsif BUS_STATE=2 then
businessState := 'thgys';
if formalcensor=0 then
businessState := 'xsscbtg';
end if;
end if;
end if;
--增長記錄
rs.extend;
DBMS_OUTPUT.put_line (rs.count);
rs(rs.count) := htjs_business_state_row_type(bissid,businessState);
end loop;
return rs;
end fun_htjs_business_state;
ui