Oracle 存储过程返回结果集

原创 2003年06月23日 16:36:00

1.返回数组 (作者:enhydraboy(乱舞的浮尘) )

在oracle后台创建一个程序包或者存储过程
connect scott/tiger;

CREATE OR REPLACE PACKAGE ado_callpkg AS
TYPE eid IS TABLE of NUMBER(4) INDEX BY BINARY_INTEGER;
TYPE ename IS TABLE of VARCHAR2(40) INDEX BY BINARY_INTEGER;
PROCEDURE getEmpNames (empid OUT eid,empname OUT ename);
end ado_callpkg;


CREATE OR REPLACE PACKAGE BODY ado_callpkg  AS
PROCEDURE getEmpNames (empid OUT eid,empname OUT ename) IS
CURSOR c1 IS select employee_id,first_name||','||Middle_Initial||','||last_name as name from employee;
cnt NUMBER DEFAULT 1;
c c1%ROWTYPE;
BEGIN
open c1;
LOOP
      FETCH c1 INTO c;
      empname(cnt):=c.name;
      empid(cnt):=c.employee_id;
      EXIT WHEN c1%NOTFOUND;  -- process the data
       cnt :=cnt+1;
  END LOOP;
close c1;
END;
end ado_callpkg;

2 前台vb程序调用

 Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim str As String
   
    str = "{call ado_callpkg.getEmpNames({resultset 100,empid,empname})}"
    cn.Open "Provider=MSDAORA.1;Password=tiger;User ID=scott;Data Source=ORACLE;Persist Security Info=True"
    With cmd
        .CommandText = str
        .ActiveConnection = cn
        .CommandType = adCmdText
    End With
   
    rs.CursorLocation = adUseClient
    rs.Open cmd
    Do While Not rs.EOF
   
        Debug.Print rs.Fields(0).Value & vbTab & rs.Fields(1).Value
        rs.MoveNext
    Loop

------------

总结
1 oracle的后台存储过程,应该通过一个类似数组并且带有数字索引的变量返回,有多少个列,就有对应多少个变量
2 前台,调用的sql语句写法要注意,
{call <package_name>.<prodecure name>(<input1>,<input2>,....<inputn>,{resultset <number>,<output1>,<output2>,...<outputn>})}
注意的细节,
(1) <number>要自己指定一个数字,表示接受的行数大小,如果太小,而实际返回的记录大于这个数字,会出错
(2) 如果有输入参数,应该在command中创建输入参数,对应的地方用?替代,如
{call ado_callpkg.getEmpNames(?,{resultset 100,empid,empname})}
(3) output和你存储函数的定义一致,参数名要一样,次序也一样,否则也会出错。

 

关于oracle调用存储过程返回结果集

这两天因为公司要求,去学习了下以前一直模模糊糊的存储过程,记录下关于返回结果集的问题。 要返回结果集,首先你必须有个游标,它是记录你的查询集的。而定义一个游标有好多方法: 1,你可以在包中定义。然...
  • wjs7740
  • wjs7740
  • 2014年01月17日 10:38
  • 1889

oracle存储过程学习(二)-调用存储过程和返回结果集

1.定义包:oracle返回的结果集需要
  • hekang1011
  • hekang1011
  • 2014年04月04日 15:16
  • 1041

Oracle的存储过程返回结果集

Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor ...
  • u012975700
  • u012975700
  • 2016年04月21日 20:17
  • 1579

Oracle 存储过程 动态SQL 语句 返回结果集

----------------------------------准备测试表和数据 CREATE TABLE TUZHEN_TEST001 ( ID NUMBER , XINGMING VA...
  • tuzhen007
  • tuzhen007
  • 2014年08月08日 16:03
  • 1996

Oracle的存储过程如何返回结果集

过程返回记录集: CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get ...
  • ElfLibra
  • ElfLibra
  • 2006年08月10日 13:37
  • 595

oracle 存储过程 分页 返回结果集

/*CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR; END pkg_query; CREATE OR RE...
  • shuiluobu
  • shuiluobu
  • 2014年05月06日 16:45
  • 865

oracle 存储过程返回 结果集 table形式 (使用sys_refcursor 及程序包package 两种方式)

1.创建一个表Test用来测试.CREATE TABLE "TEST" ( "AAA" NUMBER(*,0), "BBB" VARCHAR2(10 BYTE) )2.向Test表...
  • cherish1forever
  • cherish1forever
  • 2015年11月27日 12:01
  • 5362

Oracle的存储过程-返回一个查询的结果集

oracle的存储过程返回一个查询的结果集create or replace procedure p_test(p_cur out sys_refcursor) as begin open ...
  • u012975700
  • u012975700
  • 2016年04月21日 19:55
  • 2073

c#使用oracle存储过程获取结果集实例

存储过程:create or replace PACKAGE FIRSTPAGE AS  /* TODO enter package declarations (types, exceptions, ...
  • wyljz
  • wyljz
  • 2008年05月04日 10:14
  • 1071

Oracle和SQLServer分别使用函数和存储过程返回结果集

我们知道,SQLServer无论是函数还是存储过程,其返回结果集都是较为简单的,在这里我们就不多加说明了,下面我们将通过实例详细分析一下Oracle的函数和存储过程返回结果集的方法:1、函数首先创建某...
  • lb_mail
  • lb_mail
  • 2011年06月02日 15:30
  • 9177
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle 存储过程返回结果集
举报原因:
原因补充:

(最多只允许输入30个字)