Oracle中通过存储过程中返回数据集及在Delphi中使用

憨憨不好

憨憨不好

2016-02-19 19:56

今天图老师小编给大家介绍下Oracle中通过存储过程中返回数据集及在Delphi中使用,平时喜欢Oracle中通过存储过程中返回数据集及在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;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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;

  

  附:创建返回数据集的存储过程 简单框架

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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;


展开更多 50%)
分享

猜你喜欢

Oracle中通过存储过程中返回数据集及在Delphi中使用

编程语言 网络编程
Oracle中通过存储过程中返回数据集及在Delphi中使用

如何在oracle存储过程中返回游标

编程语言 网络编程
如何在oracle存储过程中返回游标

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

了解Oracle存储过程中的角色

编程语言 网络编程
了解Oracle存储过程中的角色

在存储过程中实现分页

Web开发
在存储过程中实现分页

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ASP调用ORACLE存储过程并返回结果集

ASP
ASP调用ORACLE存储过程并返回结果集

在ASP中使用存储过程

ASP
在ASP中使用存储过程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

运用Excel 2007完成试卷说明

运用Excel 2007完成试卷说明

DELPHI加注册表自启动的最简单代码

DELPHI加注册表自启动的最简单代码
下拉加载更多内容 ↓