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(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
May 19 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
JavaScript表单验证的两种实现方法
Feb 11 Javascript
100多个基础常用JS函数和语法集合大全
Feb 16 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
vue无限轮播插件代码实例
May 10 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php 无限分类的树类代码
2009/12/03 PHP
PHP使用数组实现队列
2012/02/05 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python探索之自定义实现线程池
2017/10/27 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
python找出因数与质因数的方法
2019/07/25 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
群众路线教育实践活动的心得体会
2014/09/03 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
优质护理服务心得体会
2016/01/22 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python
Python装饰器详细介绍
2022/03/25 Python