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 相关文章推荐
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
Jan 09 Javascript
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
JS实现判断碰撞的方法
Feb 11 Javascript
Bootstrap下拉菜单效果实例代码分享
Jun 30 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
从零学习node.js之文件操作(三)
Feb 21 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
详解Node.js使用token进行认证的简单示例
May 25 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
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
canvas知识总结
2017/01/25 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
Python中删除文件的程序代码
2011/03/13 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
keras.layer.input()用法说明
2020/06/16 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
中学门卫岗位职责
2013/12/26 职场文书
授权委托书格式模板
2014/04/03 职场文书
应聘教师求职信范文
2015/03/20 职场文书
教学副校长工作总结
2015/08/13 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python