麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Oracle中通過存儲過程中返回數(shù)據(jù)集及在Delphi中使用

2019-11-18 18:01:10
字體:
供稿:網(wǎng)友
 

一、使用存儲過程返回數(shù)據(jù)集
Oracle中存儲過程返回數(shù)據(jù)集是通過ref cursor類型數(shù)據(jù)的參數(shù)返回的,而返回數(shù)據(jù)的參數(shù)應該是out或in out類型的。
由于在定義存儲過程時無法直接指定參數(shù)的數(shù)據(jù)類型為:ref cursor,而是首先通過以下方法將ref cursor進行了重定義:
create or replace package FuxjPackage is
type FuxjResultSet is ref cursor;
--還可以定義其他內(nèi)容
end FuxjPackage;
再定義存儲過程:
create or replace PRocedure UpdatefuxjExample (sDM in char,sMC in char, pRecCur in out FuxjPackage.FuxjResultSet)
as
begin
update fuxjExample set mc=sMC where dm=sDM;

if SQL%ROWCOUNT=0 then
rollback;
open pRecCur for
select '0' res from dual;
else
commit;
open pRecCur for
select '1' res from dual;
end if;
end;

create or replace procedure InsertfuxjExample (sDM in char,sMC in char, pRecCur in out FuxjPackage.FuxjResultSet)
as
begin
insert into FuxjExample (dm,mc) values (sDM,sMC);
commit;
open pRecCur for
select * from FuxjExample;
end;

二、在Delphi中調(diào)用返回數(shù)據(jù)集的存儲過程
可以通過TstoredProc或TQuery控件來調(diào)用執(zhí)行返回數(shù)據(jù)集的存儲,數(shù)據(jù)集通過TstoredProc或TQuery控件的參數(shù)返回,注意參數(shù)的DataType類型為ftCursor,而參數(shù)的ParamType類型為ptInputOutput。
使用TstoredProc執(zhí)行UpdatefuxjExample的相關(guān)設置為:
object StoredProc1: TStoredProc
DatabaseName = 'UseProc'
StoredProcName = 'UPDATEFUXJEXAMPLE'
ParamData = <
item
DataType = ftString
Name = 'sDM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'sMC'
ParamType = ptInput
end
item
DataType = ftCursor
Name = 'pRecCur'
ParamType = ptInputOutput
Value = Null
end>
end
執(zhí)行方法為:
StoredProc1.Params.Items[0].AsString:=Edit1.Text; //給參數(shù)賦值;
StoredProc1.Params.Items[1].AsString:=Edit2.Text; //給參數(shù)賦值;
StoredProc1.Active:=False;
StoredProc1.Active:=True; //返回結(jié)果集
使用TQuery執(zhí)行InsertfuxjExample的相關(guān)設置為:
object Query1: TQuery
DatabaseName = 'UseProc'
SQL.Strings = (
'begin'
' InsertfuxjExample(sDM=>大笑M,sMC=>:mc,pRecCur=>:RecCur);'
'end;')
ParamData = <
item
DataType = ftString
Name = 'DM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'mc'
ParamType = ptInput
end
item
DataType = ftCursor
Name = 'RecCur'
ParamType = ptInputOutput
end>
end
執(zhí)行方法為:
Query1.Params.Items[0].AsString:=Edit3.Text; //給參數(shù)賦值;
Query1.Params.Items[1].AsString:=Edit4.Text; //給參數(shù)賦值;
Query1.Active:=False;
Query1.Active:=True;


if SQL%ROWCOUNT=0 then
rollback;
open pRecCur for
select '0' res from dual;
else
commit;
open pRecCur for
select '1' res from dual;
end if;
end;

create or replace procedure InsertfuxjExample (sDM in char,sMC in char, pRecCur in out FuxjPackage.FuxjResultSet)
as
begin
insert into FuxjExample (dm,mc) values (sDM,sMC);
commit;
open pRecCur for
select * from FuxjExample;
end;

二、在Delphi中調(diào)用返回數(shù)據(jù)集的存儲過程
可以通過TstoredProc或TQuery控件來調(diào)用執(zhí)行返回數(shù)據(jù)集的存儲,數(shù)據(jù)集通過TstoredProc或TQuery控件的參數(shù)返回,注意參數(shù)的DataType類型為ftCursor,而參數(shù)的ParamType類型為ptInputOutput。
使用TstoredProc執(zhí)行UpdatefuxjExample的相關(guān)設置為:
object StoredProc1: TStoredProc
DatabaseName = 'UseProc'
StoredProcName = 'UPDATEFUXJEXAMPLE'
ParamData = <
item
DataType = ftString
Name = 'sDM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'sMC'
ParamType = ptInput
end
item
DataType = ftCursor
Name = 'pRecCur'
ParamType = ptInputOutput
Value = Null
end>
end
執(zhí)行方法為:
StoredProc1.Params.Items[0].AsString:=Edit1.Text; //給參數(shù)賦值;
StoredProc1.Params.Items[1].AsString:=Edit2.Text; //給參數(shù)賦值;
StoredProc1.Active:=False;
StoredProc1.Active:=True; //返回結(jié)果集
使用TQuery執(zhí)行InsertfuxjExample的相關(guān)設置為:
object Query1: TQuery
DatabaseName = 'UseProc'
SQL.Strings = (
'begin'
' InsertfuxjExample(sDM=>大笑M,sMC=>:mc,pRecCur=>:RecCur);'
'end;')
ParamData = <
item
DataType = ftString
Name = 'DM'
ParamType = ptInput
end
item
DataType = ftString
Name = 'mc'
ParamType = ptInput
end
item
DataType = ftCursor
Name = 'RecCur'
ParamType = ptInputOutput
end>
end
執(zhí)行方法為:
Query1.Params.Items[0].AsString:=Edit3.Text; //給參數(shù)賦值;
Query1.Params.Items[1].AsString:=Edit4.Text; //給參數(shù)賦值;
Query1.Active:=False;
Query1.Active:=True;

附:創(chuàng)建返回數(shù)據(jù)集的存儲過程 簡單框架

1.
create or replace package TestPackage is
type TestResultSet is ref cursor;
end TestPackage ;

2.
create or replace procedure Test
(
pRecCur in out TestPackage .TestResultSet
)
as
begin
open pRecCur for
select * from table;
end;



上一篇:在Delphi中通過函數(shù)獲取GUID

下一篇:模擬delphi編輯窗體操作控件。。。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: avlululu | 精品国产一区二区三区成人影院 | 色综合激情 | 国产精品成人av片免费看最爱 | 久草在线资源观看 | 欧美人成在线视频 | 欧美精品一区二区三区久久久 | 日韩专区在线 | 国产精品成人免费一区久久羞羞 | 国产精品美女一区二区 | 深夜激情视频 | 欧美18—19sex性护士中国 | 亚洲国产美女视频 | 九色免费视频 | 久久国产一二区 | 久久综合艹 | 操嫩草| 黑人日比视频 | 欧美一级做a | 久久综合色区 | 国产69精品99久久久久久宅男 | 国产二区三区视频 | 久久精国 | 伊人yinren22综合网色 | 久久国产精品久久久久久久久久 | 爽爽淫人综合网网站 | 毛片在哪看| 成人羞羞国产免费游戏 | 色综合欧美 | 亚洲视频成人在线 | 女人久久久www免费人成看片 | 精品亚洲视频在线 | 一级电影免费在线观看 | 91天堂国产在线 | 99精品在线免费 | a网站在线 | 国产一区二区三区四区波多野结衣 | 免费看性xxx高清视频自由 | 久久精品在线免费观看 | 日韩精品无码一区二区三区 | 羞羞视频.www在线观看 |