create or replace procedure GetA
as
  begin
    Select * from abc;
  end;我就是想返回一个记录集。
我知道上面select * from abc 不对。但我找了很多资料,不知道该怎么改。请大哥帮我改成一个正确的。给你100分。我再到梦里去谢你。否则我今天不睡了。谢谢!

解决方案 »

  1.   

    oracle的过程返回结果集需要用到游标,具体可以参考:http://www.chinaitlab.com/www/news/article_show.asp?id=38154
    或自己上网搜索一下。
      

  2.   

    create or replace procedure GetA
    as
    begin
    for cur in(
    Select a,b,c from abc
    ) loop
    dbms_output.put_line(cur.a || cur.b || cur.c);
    end loop;
    end;
    /
      

  3.   

    ORA-06550: 第 1 行, 第 7 列: PLS-00905: 对象 SYSTEM.GETA 无效 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored 
      

  4.   

    把SQL换成Oracle怎么出这么多问题呢。
      

  5.   

    想要返回记录集,需要用包和ref游标
    给你一个例子
      --定义包结构
       create or replace package pkg_callreport as
       type callreport_cursor is ref cursor;
       procedure p_GetCallReport(ani_id varchar2,callreport out callreport_cursor);
       end pkg_callreport;
    --定义包体
     create or replace package body pkg_callreport as
      procedure p_GetCallReport(ani_id varchar2,callreport out callreport_cursor) is
        begin
             open callreport for select a.*,b.CALL_AMOUNT,b.UNIT,
                                        b.rate,b.call_type,b.RERATE_STATUS from callrecord a ,callcharges b
                                        where a.CALL_REC_ID=b.CALL_REC_ID and a.USER_ID=ani_id;
        end p_GetCallReport;
      end pkg_callreport;
     
    查看ref游标的返回结果:
       SQL*PLUS>set serverout on;
       SQL*PLUS>variable l_cr refcursor;
       SQL*PLUS>exec pkg_callreport(:l_cr);
      

  6.   

    to ORA-06550: 第 1 行, 第 7 列: PLS-00905: 对象 SYSTEM.GETA 无效 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored 不要直接在 SYSTEM 用户下执行操作,换个普通用户吧
      

  7.   

    你的需求没有讲清楚,如果想要返回记录集的话,可以用space6212() ( )方法
      

  8.   

    create or replace procedure geta is
    cursor qhz is select * from abc;
    hs number;
    sjh abc%rowtype;
    begin
    select count(*) into hs from abc;
    open qhz;
    loop
    fetch qhz into sjh;
    dbms_output.put_line(sjh.列名||sjh.列名);
    exit when qhz%rowcount=hs;
    end loop;
    close qhz;
    end;
    不知道是不是你想要的显示结果,显示表的所有内容
      

  9.   

    要想通過過程或函數返回記錄集有以下三種方式:
    一、在過程參數中使用一個OUT遊標,然後在過程裡對它進行設置,或者創建一個返回遊標型的函數,當要獲得記錄集時,調用過程或函數,然後再引用返回的遊標即可;
    二、創建一個自定義記錄表類型,再通過它來創建一個帶參數的視圖,當要獲得記錄集時,使用SELECT * FROM 視圖名(參數)即可;
    三、使用包,在包中創建一個自定義記錄表類型,再在其中創建帶此記錄表變量的OUT參數的過程(或返回此記錄表類型的函數),在過程中將所需記錄數據插入此變量中,當要獲得記錄集時,使用SELECT調用包的過程的語句即可;