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 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
JavaScript实现基于十进制的四舍五入实例
Jul 17 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
Jan 27 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
原生JS简单实现ajax的方法示例
Nov 29 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
对angularJs中ng-style动态改变样式的实例讲解
Sep 30 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 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获取地址栏信息的代码
2008/10/08 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
jquery图片切换插件
2015/03/16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
django中瀑布流写法实例代码
2019/10/14 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
Python数据可视化图实现过程详解
2020/06/12 Python
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
C++:局部变量能否和全局变量重名
2014/03/03 面试题
中秋节礼品促销方案
2014/02/02 职场文书
高中班级口号
2014/06/09 职场文书
企业标语大全
2014/07/01 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技