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 相关文章推荐
Javascript打印网页部分内容的脚本
Nov 17 Javascript
JavaScript asp.net 获取当前超链接中的文本
Apr 14 Javascript
js里怎么取select标签里的值并修改
Dec 10 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
Sep 06 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
Ionic如何创建APP项目
Jun 03 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
详解react服务端渲染(同构)的方法
Sep 21 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
Jul 20 Javascript
微信小程序实现侧边分类栏
Oct 21 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的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
详解js中==与===的区别
2017/01/08 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
python正则分组的应用
2013/11/10 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
春节晚会主持词
2014/03/24 职场文书
影子教师研修方案
2014/06/14 职场文书
师范类求职信
2014/06/21 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
2014年行政部工作总结
2014/11/19 职场文书
Python matplotlib绘制雷达图
2022/04/13 Python
Python读取和写入Excel数据
2022/04/20 Python