国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

Oracle中通過存儲過程中返回數據集及在Delphi中使用

2019-11-18 18:01:10
字體:
來源:轉載
供稿:網友
 

一、使用存儲過程返回數據集
Oracle中存儲過程返回數據集是通過ref cursor類型數據的參數返回的,而返回數據的參數應該是out或in out類型的。
由于在定義存儲過程時無法直接指定參數的數據類型為:ref cursor,而是首先通過以下方法將ref cursor進行了重定義:
create or replace package FuxjPackage is
type FuxjResultSet is ref cursor;
--還可以定義其他內容
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中調用返回數據集的存儲過程
可以通過TstoredProc或TQuery控件來調用執行返回數據集的存儲,數據集通過TstoredProc或TQuery控件的參數返回,注意參數的DataType類型為ftCursor,而參數的ParamType類型為ptInputOutput。
使用TstoredProc執行UpdatefuxjExample的相關設置為:
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
執行方法為:
StoredProc1.Params.Items[0].AsString:=Edit1.Text; //給參數賦值;
StoredProc1.Params.Items[1].AsString:=Edit2.Text; //給參數賦值;
StoredProc1.Active:=False;
StoredProc1.Active:=True; //返回結果集
使用TQuery執行InsertfuxjExample的相關設置為:
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
執行方法為:
Query1.Params.Items[0].AsString:=Edit3.Text; //給參數賦值;
Query1.Params.Items[1].AsString:=Edit4.Text; //給參數賦值;
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中調用返回數據集的存儲過程
可以通過TstoredProc或TQuery控件來調用執行返回數據集的存儲,數據集通過TstoredProc或TQuery控件的參數返回,注意參數的DataType類型為ftCursor,而參數的ParamType類型為ptInputOutput。
使用TstoredProc執行UpdatefuxjExample的相關設置為:
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
執行方法為:
StoredProc1.Params.Items[0].AsString:=Edit1.Text; //給參數賦值;
StoredProc1.Params.Items[1].AsString:=Edit2.Text; //給參數賦值;
StoredProc1.Active:=False;
StoredProc1.Active:=True; //返回結果集
使用TQuery執行InsertfuxjExample的相關設置為:
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
執行方法為:
Query1.Params.Items[0].AsString:=Edit3.Text; //給參數賦值;
Query1.Params.Items[1].AsString:=Edit4.Text; //給參數賦值;
Query1.Active:=False;
Query1.Active:=True;

附:創建返回數據集的存儲過程 簡單框架

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中通過函數獲取GUID

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

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 和平区| 博爱县| 武冈市| 隆化县| 台南市| 江达县| 桃源县| 收藏| 彰武县| 永州市| 陆河县| 东台市| 北流市| 确山县| 龙泉市| 乡宁县| 五峰| 仁怀市| 丽水市| 石门县| 洛扎县| 井陉县| 金沙县| 邛崃市| 东乡| 东宁县| 甘南县| 盈江县| 合阳县| 德令哈市| 吉木萨尔县| 定日县| 苍山县| 巢湖市| 衢州市| 丹凤县| 临漳县| 休宁县| 恩平市| 丰宁| 武乡县|