在PB中用oracle的預存程序返回記錄集做資料來源來產生資料視窗
首先oracle的預存程序寫法與MSSQL不一樣,差別比較大。如果是返回資料集的預存程序則需要利用oracle的包來定義遊標。
但是若按正規的oracle寫法,預存程序寫在包體裡面,如果這樣的話,PB會找不到此預存程序(如果用直連的方式)(如果用ODBC的方式則有可能不能正常識別預存程序的參數)
因此我們需要將預存程序單獨寫。
首先我們來看下oracle正規的返回結果集的預存程序的寫法
方法一:
create or replace package pkg_Sp_Changebill
--基於更改單的包
--建立包(因為oracle 的預存程序若想要返回記錄集則需要利用遊標的方式來實現)
as
Type Cur_myRecord Is ref Cursor RETURN item%RowType;
procedure sp_mx3_wgggcp(stritemid varchar2, cur_List out cur_MyRecord);
end pkg_Sp_Changebill;
/
create or replace package body pkg_Sp_Changebill as
procedure sp_mx3_wgggcp(stritemid varchar2,cur_List out cur_MyRecord) as
Begin
--預存程序的執行體
open cur_List for
select * from item where itemid =stritemid ;
end sp_mx3_wgggcp;
end pkg_Sp_Changebill;
如果按上述寫法,則在PB中如果是按直接方式來串連資料庫的則會找不著這個預存程序,如果是按odbc方式來串連資料庫的則能找到些預存程序但是無法正確識別參數。
方法二:下面這種寫法是沒有將預存程序包含在包裡的。
create or replace package pkg_Sp_Changebill3
as
Type Cur_myRecord Is ref Cursor RETURN item%RowType; --指明此遊標是按item表記錄的形式返回
end pkg_Sp_Changebill3;
/
create or replace procedure sp_mx3_wgggcp3(stritemid varchar2,
cur_List out pkg_Sp_Changebill3.cur_MyRecord)—遊標可直接用 包名.遊標名
as
Begin
--預存程序的執行體
open cur_List for
select * from item
where itemid = stritemid;
end sp_mx3_wgggcp3;
在直連方式下能找到此預存程序且能正常識別參數。在odbc方式下能找到這個預存程序,但是參數不能正確識別。