Oracle817下存儲過程改成Oracle7下,由於Oracle7下不支持OPEN CUR_1 FOR strSql1;--打開bill_tj_out的動態游標的寫法,采用CUR_1 := dbms_sql.open_cursor; --打開游標;方式打開游標。
下面的兩個存儲過程有相同的功能。
Oracle817下的動態游標存儲過程如下:
CREATE OR REPLACE PROCEDURE Pro_Remain_Merge_Win
(
p_orgid_win string,--窗口的ID號
p_userid string
)
is
TYPE My_CurType IS REF CURSOR;
CUR_1 My_CurType;--指示CUR_1的類型為My_CurType,而My_CurType是游標類型
CUR_2 My_CurType;--指示CUR_1的類型為My_CurType,而My_CurType是游標類型
strSql1 varchar2(3000);
strSql2 varchar2(3000);
strSql3 varchar2(3000);
t_bill_typeid number;--窗口發售的票據種類的ID號
t_orgid_zhan number;--窗口所在車站的ID號
--下面的為表合並時需要使用的臨時變量
t_bill_id_1 number;
t_bill_typeid_1 number;
t_bill_sign_1 varchar2(12);
t_start_no_1 number;
t_end_no_1 number;
t_all_num_1 number;
t_bill_time_1 date;
t_bill_time_1_yyyy number;--bill_time中的年
t_bill_time_1_mm number;--bill_time中的有
--
t_bill_id_2 number;
t_bill_id_2_merge number;--在表bill_tj_out_a表中,找到的可以合並的記錄的ID號
t_bill_typeid_2 number;
t_bill_sign_2 varchar2(12);
t_start_no_2 number;
t_end_no_2 number;
t_all_num_2 number;
t_bill_time_2 date;
t_bill_time_2_str varchar2(40);--日期的串格式,在更新時要使用
t_bill_time_2_yyyy number;--bill_time中的年
t_bill_time_2_mm number;--bill_time中的有
BEGIN
t_bill_id_2_merge:=0;--剛開始時的初始值
delete bill_tj_out_a where userid=p_userid;
commit;
--返回窗口使用的票據的種類
select nvl(bill_wintobilltype.billtypeid,0) into t_bill_typeid
from bill_org,bill_wintobilltype
where bill_org.org_id=bill_wintobilltype.winid
and bill_org.org_id=p_orgid_win;
--返回車站的ID號
select nvl(bill_org.parent_id,0) into t_orgid_zhan
from bill_org where org_id=p_orgid_win;
--execute dbms_output.enable(999999999999999999999);
strSql1:=''SELECT bill_id,bill_typeid,bill_sign,start_no,end_no, all_num,bill_time FROM bill_tj_out WHERE userid=''||p_userid
||'' order by bill_sign,start_no,end_no'';
strSql2:=''SELECT bill_id,bill_typeid,bill_sign,start_no,end_no, all_num,bill_time FROM bill_tj_out_a WHERE userid=''||p_userid
||'' order by bill_sign,start_no'';
delete bill_tj_out_a where userid=p_userid;
commit;