如何在PB中執行oracle預存程序並接收返回的資料集

來源:互聯網
上載者:User
在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方式下能找到這個預存程序,但是參數不能正確識別。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.