oracle创建存储过程并返回结果集(附C#调用代码)
使用存储过程中,最常用的莫过于查询数据表,并返回结果集。
在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成。但是在Oracle中并不支持这种写法,那么我们怎么实现跟SQL SERVER同样的功能呢?且看以下代码:
create or replace procedure sp_getdept
(rep_type in varchar2,sel in varchar2,result out sys_refcursor)
as
seq varchar2(40);
info varchar2(40);
begin
if rep_type = '' then
open result for select * from help;
end IF;
if rep_type = '' then
select seq,info into seq,info from help where rownum=1;
end if;
end;
通过代码可以看到,oracle中通过游标sys_refcursor实现返回一个table格式的结构集。注意定义方式result out sys_refcursor,跟C#中out 参数类型有点类似。
sys_refcursor和 cursor 比较:
sys_refcursor不能用open,close ,fetch 进行操作。可以用作参数。
cursor可以用 open,close ,fetch操作。不可以用作参数。
下面是C#调用上例存储过程的代码:
OracleConnection con = new OracleConnection("Password=manager;User ID=SYSTEM;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));");
OracleCommand cmd = new OracleCommand("sp_getdept", con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter p0 = new OracleParameter("rep_type", OracleType.VarChar);
p0.Direction = ParameterDirection.Input;
cmd.Parameters.Add(p0);
cmd.Parameters["rep_type"].Value = "";
OracleParameter p1 = new OracleParameter("result", OracleType.Cursor);
p1.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p1);
OracleParameter p2 = new OracleParameter("sel", OracleType.VarChar);
p0.Direction = ParameterDirection.Input;
cmd.Parameters.Add(p2);
cmd.Parameters["sel"].Value = "";
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
Console.WriteLine(ds.Tables[].Rows[][].ToString());
Console.ReadLine();
希望能对您有所帮助。^_^。
oracle创建存储过程并返回结果集(附C#调用代码)的更多相关文章
- oracle的存储过程如何返回结果集
CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; PROCEDURE get (p_id NUM ...
- Oracle中函数/过程返回结果集的几种方式
原文 Oracle中函数/过程返回结果集的几种方式 Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. ...
- Oracle创建存储过程、执行存储过程基本语法
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- 存储过程不返回记录集导致ADO程序出错
HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...
- PL SQL 存储过程 SQL SERVER创建存储过程及调用,Oracle创建存储过程及调用
Oracle使用存储过程实例: 例1: //查出表字段赋值给存储过程变量 create proc proc_stu @sname varchar(20), //默认是输入参数(input),另外还有两 ...
- Oracle中函数如何返回结果集
在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...
- Oracle 存储过程例子返回记录集
转载:https://www.cnblogs.com/mikalshao/articles/1454134.html Oracle 不支持批量查询,因此无法从一个命令返回多个结果集.使用存储过程时,返 ...
- mybatis springmvc调用oracle存储过程,返回记录集
参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...
- java调用oracle存储过程,返回结果集
package com.srie.db.pro; import java.sql.CallableStatement; import java.sql.Connection; import java. ...
随机推荐
- LDO稳压器工作原理
LDO稳压器工作原理 随着便携式设备(电池供电)在过去十年间的快速增长,像原来的业界标准 LM340 和LM317 这样的稳压器件已经无法满足新的需要.这些稳压器使用NPN 达林顿管,在本文中称其为N ...
- Outlook账户迁移帮助
Outlook账户迁移指南 1. 介绍 开贴聊聊如何迁移Outlook用户账户到另外一台电脑. 相信许多Outlook用户都遇到过这样的情况:买来一台新电脑,安装完Outlook后,想把旧电脑里面的O ...
- Linux 下 scp 传输文件脚本
脚本执行效果: (1).远程传输本地 /ora_exp/dmp/CWDB_RAMS_* 文件至 11.4.24.21 的 /ora_exp/dmp 目录下. 脚本编写步骤: 假设 oracle 用 ...
- java基础理论知识的一些总结
在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...
- iOS开发中的测试框架 (转载)
作者:CrespoXiao授权 地址:http://www.jianshu.com/p/7e3f197504c1 我们为什么要用测试框架呢?当然对项目开发有帮助了,但是业内现状是经常赶进度,所以T ...
- XMPP——Smack[5]文件传输及离线消息的获取
三天时间,赶在最后一下午实现了文件的传输,本来需要实现离线文件的发送的,一直没想好怎么弄,找openfire的离线文件插件没找到,后来想出一种方法,起服务器时起了一个系统用户,一直在线,当用户发送离线 ...
- Parse error: syntax error, unexpected T_PUBLIC in 问题解决
class 类中 public function _getInfo($sn){ $title = ''; $_array = explode('~', $sn); ...
- nginx+tomcat动静分离结构
本文采用另一种策略对动静分离进行演示,它的大致结构如图 2 所示. 图 2. 本文设计的动静分离结构 在本文中,我们将静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 ...
- Web.xml 中增加log4j
配置文件例如以下.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...
- [node.js]RPC(远程过程调用)的实现原理
刚接触到RPC(远程过程调用),就是可以在本地调用远程机子上的程序的方法,看到一个简单的nodejs实现,用来学习RPC的原理很不错:nodejs light_rpc 使用示例: //服务端 ...