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 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
javascript FormatNumber函数实现方法
Dec 30 Javascript
JavaScript 继承详解(四)
Jul 13 Javascript
关于textarea提交的内容无法换行的解决办法
Apr 09 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 Javascript
JS实现字符串翻转的方法分析
Aug 31 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
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
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
php的socket编程详解
2016/11/20 PHP
微信自定义分享php代码分析
2016/11/24 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
Jquery 设置标题的自动翻转
2009/10/03 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
js实现简单贪吃蛇游戏
2020/05/15 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
简述Python2与Python3的不同点
2018/01/21 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
python3将变量输入的简单实例
2020/08/19 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
五十岁生日宴会答谢词
2014/01/15 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
幼儿教师个人总结
2015/02/05 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python