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中的事件处理
Jan 16 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 Javascript
微信小程序 下拉菜单的实现
Apr 06 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
Sep 07 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
php post换行的方法
2020/02/03 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
七年级生物教学反思
2014/01/30 职场文书
四个太阳教学反思
2014/02/01 职场文书
服务员岗位责任制
2014/02/11 职场文书
保证书范文大全
2014/04/28 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
基层党支部整改方案
2014/10/25 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
签约仪式致辞
2015/07/30 职场文书
青年志愿者活动感想
2015/08/07 职场文书