oracle 存储过程返回结果集
2012-09-13 11:17
393 查看
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;
-- 启用服务器输出
---------------------
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 存储过程返回结果集
- Java 调用 Oracle 存储过程返回结果集
- oracle 用包加存储过程和直接应用存储过程做的简单的应用存储过程返回结果集
- mybatis 调用oracle中的存储过程返回结果集
- oracle调用存储过程和函数返回结果集
- oracle存储过程中使用Ref Cursor强类型游标返回结果集
- oracle 存储过程执行可输入sql语句并返回结果集
- Oracle 存储过程返回结果集
- asp 调用 oracle存储过程并返回结果集
- ASP 调用 Oracle 存储过程返回结果集
- oracle的存储过程如何返回结果集
- Oracle 存储过程返回结果集
- oracle 存储过程返回结果集
- C#调用Oracle存储过程并返回结果集
- Oracle的存储过程如何返回结果集
- Oracle 存储过程返回结果集
- Oracle在存储过程中如何返回结果集
- 使用VB调用Oracle程序包内的存储过程返回结果集