oracle的儲存過程返回記錄集,找到兩個oracle段都一樣,只是c#部份有點區別,都放上來,個人偏向使用用第乙個。
c#呼叫oracle儲存過程返回結果集及函式
oracle段:
首先在oracle建立package和package body,將在這裡面定義函式和儲存過程返回結果集。
1:建立package:
create or replace package scott.pk_wt
is type mytype is ref cursor;
procedure p_wt(mycs out mytype);
function f_get(str in varchar2)
return varchar2;
end;
/ 說明:其實package只是個宣告罷了。我們在這裡定義了乙個儲存過程返回結集和乙個函式,返回字串。
2:建立package body:
create or replace package body scott.pk_wt
is procedure p_wt(mycs out mytype)
is begin
open mycs for select * from test;
end p_wt;
function f_get(str varchar2)
return varchar2
is str_temp varchar2(100) := ''good luck!'';
begin
str_temp := str_temp || str;
return str_temp;
end f_get;
end pk_wt;
/ 說明:這裡建立package body是具體的說明和使用,將採用什麼方式實現。。
c#呼叫oracle返回結果集:
oraclecommand cmd=new oraclecommand("pk_wt.p_wt",orcn);
cmd.commandtype=commandtype.storedprocedure;
oracleparameter p1=new oracleparameter("mycs",oracletype.cursor);
p1.direction=system.data.parameterdirection.output;
cmd.parameters.add(p1);
oracledataadapter da=new oracledataadapter(cmd);
dataset ds=new dataset();
da.fill(ds,"test");
this.datagrid1.datasource=ds;
this.datagrid1.databind();
這裡沒什麼可說的類。。只是定義的資料型別是游標,型別是output,另外沒什麼了。。
oracle的儲存過程返回記錄集
oracle的儲存過程返回記錄集,關鍵之處是要用游標。
關於資料庫的游標(cursor)大家肯定都接觸不少,我們可以通過open,fetch,close操作控制游標進行各種方便的操作,這方面的例子我就不在重複了。我們現在要介紹的是游標變數(cursor variable)。類似游標,游標變數也是指向乙個查詢結果集的當前行。不同的是,游標變數能為任何型別相似(type-compatible)的查詢開啟,而並不是繫結到某乙個特定的查詢。通過游標變數,你可以在資料庫的資料提取中獲得更多的方便。
首先是建立表。
create table lihuan.bill_points
( points_id number(10,0) not null,
customer_id number(10,0) not null,
bill_point_no number(2,0) default 1 not null,
constraint pk_bill_points primary key (points_id)
) /
其次,建package
create or replace package lihuan.yy_pkg_bill_point_no/*取得使用者的所有計費電序號*/
is type t_cursor is ref cursor;
procedure bill_point_no(p_customer_id bill_points.customer_id%type,
re_cursor out t_cursor);
end;
/ 再次,建package body
create or replace package body lihuan.yy_pkg_bill_point_no/*取得使用者的所有計費電序號*/
is procedure bill_point_no(p_customer_id bill_points.customer_id%type,
re_cursor out t_cursor)
is v_cursor t_cursor;
begin
open v_cursor for
select bill_point_no from bill_points where customer_id =p_customer_id;
re_cursor := v_cursor;
end;
end;
/ 最後,在.net中程式呼叫。
public dataset bill_point_no(string customer_id)//ok
else
return dataset;
} public bool runprocedure(string returnparameter,oracletype paramtype,ref dataset dataset,hashtable ht ,string procedurename,string oracleconnection)
oracledataadapter odadapter=new oracledataadapter(dacommand);
try
catch(system.exception e)
finally
C 呼叫oracle儲存過程 最簡單的例項
oracle方面 建立oracle過程儲存 create or replace procedure proce test paramin in varchar2,paramout out varchar2,paraminout in out varchar2 asvarparam varchar2 ...
C 呼叫oracle儲存過程 最簡單的例項
oracle方面 建立oracle過程儲存 create or replace procedure proce test paramin in varchar2,paramout out varchar2,paraminout in out varchar2 asvarparam varchar2 ...
C 呼叫oracle儲存過程
建立oracle過程儲存 create or replace procedure proce test paramin in varchar2,paramout out varchar2,paraminout in out varchar2 asvarparam varchar2 28 begin ...