oracle 存储过程返回结果集
好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集.
配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过程中先根据过滤条件从海量数据表中选出符合条件的记录并存放到临时中, 可以通过一个视图将临时表与其他相关表连接起来, 从而避免海量数据造成的连接效率问题.
本文只讨论使用存储过程返回结果集.
具体实现如下:
-- 启用服务器输出
---------------------
set serveroutput on
-- 创建测试表
---------------------
create table test_pkg_test
(
id number(10) constraint pk_test_pkg_test primary key,
name varchar2(30)
);
-- 写入测试数据
---------------------
begin
insert into test_pkg_test(id) values(1);
insert into test_pkg_test(id) values(2);
insert into test_pkg_test(id) values(3);
insert into test_pkg_test(id) values(4);
insert into test_pkg_test(id) values(5);
insert into test_pkg_test(id) values(6);
insert into test_pkg_test(id) values(7);
insert into test_pkg_test(id) values(8);
insert into test_pkg_test(id) values(9);
insert into test_pkg_test(id) values(10);
insert into test_pkg_test(id) values(11);
insert into test_pkg_test(id) values(12);
insert into test_pkg_test(id) values(13);
insert into test_pkg_test(id) values(14);
insert into test_pkg_test(id) values(15);
insert into test_pkg_test(id) values(16);
insert into test_pkg_test(id) values(17);
insert into test_pkg_test(id) values(18);
end;
/
update test_pkg_test set name='name of ' || to_char(id);
commit;
-- 声明程序包
---------------------
create or replace package pkg_test
as
type type_cursor is ref cursor;
procedure read_rows (header varchar2, result out type_cursor);
end pkg_test;
/
-- 实现程序包
---------------------
create or replace package body pkg_test
as
procedure read_rows (header varchar2, result out type_cursor)
is
sqlText varchar2(500);
begin
if header is null or length(header)=0 then
sqlText := 'select * from test_pkg_test';
else
sqlText := 'select * from test_pkg_test where substr(name,1,' || to_char(length(header)) || ')=''' || header || '''';
end if;
--dbms_output.put_line(sqlText);
open result for sqlText;
end read_rows;
end pkg_test;
/
-- 在 sqlplus 中测试
---------------------
var result refcursor
exec pkg_test.read_rows(null,:result);
print result
exec pkg_test.read_rows('name of 1', :result);
print result;
-- 在程序中测试(c#.Net)
-- ***************************************
static class pkg_test
{
public static void Test()
{
using (OracleConnection conn = new OracleConnection())
{
conn.ConnectionString = "Data Source=mydb;User Id=myuser;Password=mypassword";
conn.Open();
using (OracleCommand cmd = new OracleCommand("pkg_test.read_rows", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
OracleParameter p = new OracleParameter("header", OracleType.VarChar);
p.Value = "name of 1";
//p.Value = DBNull.Value;
cmd.Parameters.Add(p);
p = new OracleParameter("result", OracleType.Cursor);
p.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(p);
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetValue(0), reader.GetValue(1));
}
}
}
}
-- ***************************************
-- 删除程序包和测试表
---------------------
drop package pkg_test;
drop table test_pkg_test;
oracle 存储过程返回结果集的更多相关文章
- oracle 存储过程返回结果集 (转载)
好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集. 配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过 ...
- oracle 存储过程 返回结果集
oracle 存储过程 返回结果集 CreationTime--2018年8月14日09点50分 Author:Marydon 1.情景展示 oracle存储过程如何返回结果集 2.解决方案 最简 ...
- 160307、Java调用Oracle存储过程返回结果集
一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGI ...
- oracle存储过程返回结果集
http://www.2cto.com/database/201204/127180.html oracle实现存储过程返回查询结果集合的方法 --实现存储过程返回查询结果集合的方法 ,以下代码来 ...
- C#中使用Oracle存储过程返回结果集
问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWN ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- c#调用oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- PostgreSQL 调用存储过程返回结果集
创建返回结果集类型的存储过程: CREATE OR REPLACE FUNCTION public.f_get_member_info( id integer, productname charact ...
随机推荐
- linux 查看CPU、内存大小
查看linux下的cpu.内存和硬盘大小: 查看cpu的方法 1. cat /proc/cpuinfo 或者 更直观的查看cpu的型号命令:dmesg |grep -i xeon 查看内存的方法 2 ...
- Redis(十七):批量操作Pipeline
大多数情况下,我们都会通过请求-相应机制去操作redis.只用这种模式的一般的步骤是,先获得jedis实例,然后通过jedis的get/put方法与redis交互.由于redis是单线程的,下一次请求 ...
- Python @ddt.file_data() 为.yml 文件实例
一,创建login.yml 文件(以登录接口为例) 1,创建 login.yml 文件,内容如下图: 打印login.yml 文件,代码及显示效果如下: 代码: import yaml,jsonf = ...
- poj 2524 Ubiquitous Religions 一简单并查集
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 22389 Accepted ...
- Oracle 11g安装图文攻略
一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: http://www.ora ...
- JSON特殊字符的处理
本文转自:http://blog.csdn.net/btt2013/article/details/66970735 JSon 数据中的String 传递数据时,需要处理好特殊字符. JSon数据中有 ...
- Pgsql排序让空值NULL排在数字后边
遇到一种情况,对数字进行排序的时候,出现NULL在数字后面的情况,现在的需求是NULL排在前面然后才是升序的排数字 [Oracle 结论] order by colum asc 时,null默认被放在 ...
- oozie开发注意事项
ooziejob执行后 1. job.properties.coordinatior.xml中设置的值都是不可变的,除非将job kill掉,然后重新调度. oozie job -kill 00000 ...
- Android基础总结(三)SQLite,ListView,对话框
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- Lua中的字符串函数库
字符串库中的一些函数是非常简单的: string.len(s) 返回字符串s的长度:string.rep(s, n) 返回重复n次字符串s的串:你使用string.rep( ...