asp.net中oracle 存储过程(图文)


Posted in Javascript onAugust 12, 2015

在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。

ORACLE代码

CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as
BEGIN
 a:='test';
 OPEN MYCS1 FOR
 SELECT 1 from dual;
 OPEN MYCS2 FOR
 SELECT 2 from dual;
END;

C#代码

/// <summary>
 /// 执行oracle存储过程返回多个结果集
 /// </summary>
 /// <param name="strProcName">存储过程名称</param>
 /// <param name="ResultCount">返回个数</param>
 /// <param name="paras">参数</param>
 /// <returns>任意对象数组</returns>
 public object[] ExcuteProc_N_Result(string strProcName, int ResultCount, params OracleParameter[] paras)
 {
  using (OracleConnection conn = new OracleConnection("User ID=用户名;Password=密码;Data Source=数据库;"))
  {
  OracleCommand cmd = new OracleCommand(strProcName, conn);
  if (paras != null && paras.Length > 0)
  {
   for (int j = 0; j < paras.Length; j++)
   {
   if (paras[j].Value == null)
   {
    paras[j].Value = DBNull.Value;
   }
   }
  }
  cmd.Parameters.AddRange(paras);
  cmd.CommandType = CommandType.StoredProcedure;
  conn.Open();
  cmd.ExecuteNonQuery();
  int i = 0;
  //int nOutputParametersCount = 0;
  object[] objResult = new object[ResultCount];
  foreach (OracleParameter p in cmd.Parameters)
  {
   if (p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput)
   {
   if (p.Value is OracleDataReader)
   {
    OracleDataReader reader = p.Value as OracleDataReader;
    objResult[i++] = ConvertDataReaderToDataTable(reader);
   }
   else
   {
    objResult[i++] = p.Value;
   }
   }
  }
  return objResult;
  }
 }
 /// <summary> 
 /// 将DataReader 转为 DataTable 
 /// </summary> 
 /// <param name="DataReader">OleDbDataReader</param> 
 protected DataTable ConvertDataReaderToDataTable(OracleDataReader reader)
 {
  DataTable objDataTable = new DataTable("TmpDataTable");
  try
  {
  int intFieldCount = reader.FieldCount;//获取当前行中的列数;
  for (int intCounter = 0; intCounter <= intFieldCount - 1; intCounter++)
  {
   objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
  }
  //populate datatable 
  objDataTable.BeginLoadData();
  //object[] objValues = new object[intFieldCount -1]; 
  object[] objValues = new object[intFieldCount];
  while (reader.Read())
  {
   reader.GetValues(objValues);
   objDataTable.LoadDataRow(objValues, true);
  }
  reader.Close();
  objDataTable.EndLoadData();
  return objDataTable;
  }
  catch (Exception ex)
  {
  throw new Exception("转换出错出错!", ex);
  }
 }

调用方法

OracleParameter[] oracleParameter = new OracleParameter[]{
new OracleParameter("MYCS1",OracleType.Cursor),
new OracleParameter("MYCS2",OracleType.Cursor),
new OracleParameter("a",OracleType.VarChar,200),
};
oracleParameter[0].Direction = ParameterDirection.Output;
oracleParameter[1].Direction = ParameterDirection.Output;
oracleParameter[2].Direction = ParameterDirection.Output;

object[] xxx = ExcuteProc_N_Result("gd_CURSOR", 3, oracleParameter);

以上内容是通过代码介绍了asp.net中oracle存储过程。

接下来通过第二种的方式在给大家介绍下oracle存储过程(图文)。

请看下面方法、步骤

第一步:通过ORACLE自带的 Net Manager 配置需要连接的数据库,如COST

asp.net中oracle 存储过程(图文)

第二步:打开PL/SQL数据库工具,属于正确的用户名和密码以及选择,点击OK进入需要创建存储过程的用户下

asp.net中oracle 存储过程(图文)

第三步:了解一般存储过程的格式

create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
Begin
   语句块
Exception --异常处理
   When others then
      Rollback;
End;

asp.net中oracle 存储过程(图文)

第四步:在SQL输入界面输入需需要创建的存储过程

create or replace procedure sp_demo(param1 in varchar2,param2 out varchar2)
/*
* 存储过程实例
*/
as
cnt int;
rst varchar2(100)
Begin
 Select count(*) into cst from Tab_Demo where Col_Value = param1;
 If (cst > 0) then --判断条件
 param2 := '有匹配的值';
 Else
 param2 := '无匹配的值';
 End if;
Exception
 When others then
 Rollback;
End;

如下图

asp.net中oracle 存储过程(图文)

第五步:测试刚才编写的存储过程

exec sp_demo('男');

asp.net中oracle 存储过程(图文)

END

注意事项

不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

如果用create or replace procedure,创建存储过程的时候注意不要与用户下现有的存储过程同名,造成现在存储过程被覆盖
存储过程参数不带取值范围,in表示传入,out表示输出

以上通过两种方式介绍哦oracle存储过程,希望对大家有所帮助。

Javascript 相关文章推荐
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
javascript的理解及经典案例分析
May 20 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
vue.js之vue-cli脚手架的搭建详解
May 05 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
vue 动态表单开发方法案例详解
Dec 02 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 #Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 #Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 #Javascript
基于jQuery实现动态数字展示效果
Aug 12 #Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 #Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 #Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 #Javascript
You might like
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
Snoopy类使用小例子
2008/04/15 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python中super()函数简介及用法分享
2016/07/11 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
巴西女装购物网站:Eclectic
2018/04/24 全球购物
施工安全承诺书
2014/05/22 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
铁路安全反思材料
2014/12/24 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
生日寿星公答谢词
2015/09/29 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电