程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Oracle中通過存儲過程中返回數據集及在Delphi中使用

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

編輯:Delphi
 一、使用存儲過程返回數據集
  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;


  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved