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 13 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
使用js画图之饼图
Jan 12 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
WEB 前端开发中防治重复提交的实现方法
Oct 26 Javascript
Vue 源码分析之 Observer实现过程
Mar 29 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
详解Webpack4多页应用打包方案
Jul 16 Javascript
Vue两种组件类型:递归组件和动态组件的用法
Aug 06 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查找指定目录下指定大小文件的方法
2014/11/28 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP实现微信对账单处理
2018/10/01 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
如何在PHP中使用数组
2020/06/09 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
python中upper是做什么用的
2020/07/20 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
大家检讨书5000字
2014/02/03 职场文书
市场营销求职信范文
2014/02/21 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
个人年终总结范文
2015/03/09 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
Mysql 一主多从的部署
2022/05/20 MySQL
Python时间操作之pytz模块使用详解
2022/06/14 Python