declare
  v_rc tinger01.myrctype;
  v_name varchar2(100);
begin
  tinger01.selectbudgettitle('myid',v_rc); --execute procedure
  -- then get recordset
  fetch v_rc into v_name;
  loop
    exit when v_rc.notfound;
    dbms_output.put_line(v_name);
    fetch v_rc into v_name;
  end loop;
end;

解决方案 »

  1.   

    你不是要在asp中调用吗?
    这是大致代码,自己去修改一下,应当就可以
    <%
     dim cn,cmd,cmdrc
     set cn = server.CreateObject("adodb.connection")
     cn.open STRDSN
     set cmd=server.CreateObject("adodb.command")
     set cmdrc=server.CreateObject("adodb.recordset")
     cmd.ActiveConnection = cn
     cmd.CommandType = adCmdText
     cmd.CommandText = "{call tinger01.selectbudgettitle(?,{resultset 0, myrctype})}"
     cmd.Parameters.Append cmd.CreateParameter("p_depart_id",adInteger,adParamInput,10,1 )
    Set cmdrc.Source = cmdR

    set cmdrc= cmdR.Execute  '这是另一种执行方式
    cmdrc.Open
    %>
      

  2.   

    cmd.CommandText = "{call tinger01.selectbudgettitle(?,{resultset 0, myrctype})}"
    这一名出错
      

  3.   

    在oracle中我改成了这样:但是在ASP中我总是出错。就是cmd.execute这一句出错。create or replace package tinger01 as
      type myrctype is ref cursor;
      procedure  selectbudgettitle(p_depart_id in     d_budget.depart_id%type,
              myrc        out myrctype);
    end tinger01;create or replace package body tinger01 as
      procedure selectbudgettitle(p_depart_id in      d_budget.DEPART_ID%type,
             myrc        out  myrctype) is
         
      begin
         open myrc for 
         select substr(session_end,1,4)||'&Auml;ê&micro;&Uacute;'||
          decode(substr(session_end,6,2),'12','&Euml;&Auml;','09','&Egrave;&yacute;','06','&para;&thorn;','&Ograve;&raquo;')
          ||'&frac14;&frac34;&para;&Egrave;' as name from 
          (select distinct session_end from d_budget where depart_id=p_depart_id  
          order by session_end desc ) 
                   order by session_end desc;
         
      end selectbudgettitle;
    end tinger01;
    &Ocirc;&Uacute;SQL/PLUS&Ouml;&ETH;&Ocirc;&Euml;&ETH;&ETH;&iexcl;&pound;
    set serveroutput on
    declare
    p_rc tinger01.myrctype;
    str  varchar2(20);
    begin
    tinger01.selectbudgettitle(1,p_rc);
    loop
    fetch p_rc into str;
    dbms_output.put_line(str);
    exit when p_rc%notfound;
    end loop;
    end;
    /
      

  4.   

    cmd.CommandText = "{call tinger01.selectbudgettitle(?,{resultset 0, myrctype})}"
    还没有执行呢,仅仅是一个简单的等于也出错,没有弄错吧
    如果有错,也该在真正执行那里啊
      

  5.   

    在oracle中按KingSunSha(弱水三千)的方法调用有错误没有
      

  6.   

    我修改了一下:cmd.CommandType = 1
    cmd.CommandText = "{call tinger01.selectbudgettitle(?,{resultset 0, myrctype})}"
    这一行不出错了,但是cmd.execute出错了。
      

  7.   

    http://www.vbip.com/books/1861001789/chapter_1789_10.asp
      

  8.   

    ORACLE端我没有错误,在上面我写好了包建的代码,同时也写了检验的代码。
    返回的结果都是正确的。就是在ASP中写的不行了。总是没有成功,急死我了。~~~~~~~~~~~``KingSunSha(弱水三千) 
    介绍的网址我也看了,但是还是出错。我用 dim cn,cmd,cmdrc
     set cn = server.CreateObject("adodb.connection")
     cn.open STRDSN
     set cmd=server.CreateObject("adodb.command")
     set cmdrc=server.CreateObject("adodb.recordset")
     cmd.ActiveConnection = cn
     cmd.CommandType = 1
     cmd.CommandText = "{call tinger01.selectbudgettitle(?,{resultset 0, myrctype})}"
     cmd.Parameters.Append cmd.CreateParameter("p_depart_id",adInteger,adParamInput,10,1 )
     set cmdrc= cmdR.Execute 出错。

      set cmd=server.CreateObject("adodb.command")
      set cmdrc=server.CreateObject("adodb.recordset")
      cmd.ActiveConnection = session("adoconn")
      cmd.CommandType = 4
      set cmdpara=cmd.CreateParameter("p_depart_id",adInteger,adParamInput,10,1 )
      'set cmdpara=cmd.CreateParameter("p_depart_id",adInteger,adParamInput,10,1 )
      'cmd.parameters.append cmdpara
      cmd.parameters.append cmdpara   cmd.CommandText = "tinger01.selectbudgettitle"
      cmd.parameters("p_depart_id")=1
      cmdrc=cmd.Execute
    也是出错。都是在cmdrc=cmd.Execute这一行出错。
      

  9.   

    用cmdrc.Source = cmdR呢?
    现在没有环境,如果有环境,我可以帮你测试一下,唉.
      

  10.   

    我周末在家,家里没有oracle,要周一才可以
      

  11.   


    http://expert.csdn.net/Expert/topic/1182/1182914.xml?temp=.179516
      

  12.   

    今天去了别的城市开会一整天,刚刚回来.做了一下测试,结果没有问题.测试过程如下:
    under SQL PLUS>
    ===============================================================
    --create table
    CREATE TABLE T_HEAD
    ( HEAD_NO  VARCHAR2(10));
    --create package
    CREATE OR REPLACE package pkg_typ is
      type TypCur is ref cursor;
    procedure pro_test(p_id number, p_cur out TypCur);
    end;
    /
    --create package body
    CREATE OR REPLACE package body pkg_typ is
      procedure pro_test(p_id number, p_cur out TypCur)
      is
      begin
        open p_cur for select head_no from t_head;
      end;
    end;
    /under VB(ADO2.5)
    ===============================================================
    Option Explicit
    Private Sub Command1_Click()
        Dim conn As ADODB.Connection
        Dim cmd As ADODB.Command
        Dim rs As ADODB.Recordset
        
        Set conn = New ADODB.Connection
        conn.CursorLocation = adUseClient
        conn.Open "Provider=MSDAORA.1;" & _
                     "Password=qsun;User ID=qsun;" & _
                     "Data Source=manu;"
        
        Set cmd = New ADODB.Command
        cmd.ActiveConnection = conn
        cmd.CommandType = adCmdText
        cmd.CommandText = "{call pkg_typ.pro_test(?,{resultset 0, p_cur})}"
        cmd.Parameters.Append cmd.CreateParameter("p_id", adNumeric, adParamInput, 10, 1)
        Set rs = cmd.Execute
        
        Do Until rs.EOF
            Debug.Print rs.Fields(0)
            rs.MoveNext
        Loop
        
        rs.Close
        conn.Close
    End Sub结果没有问题.你检查一下是否是ADO版本的问题.