请各位给个例子 ,谢了。。

解决方案 »

  1.   


    --你是想返回游标吧
    create or replace procedure sp_test(o_data out sys_refcursor)
    as
    begin
      open o_data for select * from table;
    end;
      

  2.   

    可以定义
    type CURSOR1 is REF CURSOR;
    然后存储过程中定义一个 pd_1(pd_cursor out CURSOR1 )就可以返回一个结果集了。
      

  3.   

    不能是视图 可以返回游标create or replace PROCEDURE P_TEST(P_CURSOR out SYS_REFCURSOR )
    is
    begin
    open P_CURSOR  for select * from table1;
    end;
      

  4.   

    存储过程没有返回值,函数才有返回值,oracle里面也没有视图的数据类型。
      

  5.   

    嗯 发的有误 没说清楚  就是返回游标  游标存储的数据是来自视图,以下是我写的一个实例,提示游标无效,不解
    create view aa view as select * from tb_test   
    tb_test(ID CHAR(2),NAME VARCHAR2(10))
    --创建存储过程
    create or replace procedure sp_return_view
    (ret_cursor out sys_refcursor) is
      sqlstr varchar2(100);
      n_count number;
    begin
      select count(*) into n_count from aa;
      if n_count=0 then
       insert into aa values('30','xiaowang');
         else
           sqlstr:='selece * from aa';
           execute immediate sqlstr;
           open ret_cursor for sqlstr;
           end if;
           exception
               when others then
                 dbms_output.put_line('发生其他错误,请核对代码是否正确!!');
    end sp_return_view;调用过程declare
        ret_cursor_value sys_refcursor;
        view_info tb_test%rowtype;
        begin
          sp_return_view(ret_cursor_value);
          loop
            fetch ret_cursor_value into view_info ;
            dbms_output.put_line(view_info.id||','||view_info.name);
            exit when %notfound ;
            end loop;ret_cursor_value
            end;
            
      
      

  6.   

    -- 您 是要返回视图的名称,还是视图里面的数据?视图无非就是事先封装定义的SQL语句,
    -- 如果要返回视图里面的数据,就跟返回表里面的数据是一回事撒!-- 请看例子:
    -- 实例:Oracle存储过程返回数据集!CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));insert into userinfo(id,name,sex,age,address) values(1,'luoyoumou','男',33,'湖南省衡阳市');
    insert into userinfo(id,name,sex,age,address) values(2,'miaoxiaoming','男',32,'江西省吉安市');
    insert into userinfo(id,name,sex,age,address) values(3,'hanqiguang','男',28,'江西省赣州市');commit;create table userinfo2 as select * from userinfo where 1=2;-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!
    CREATE OR REPLACE PROCEDURE userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)
    IS
      sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句
    BEGIN
      sqlstr := 'SELECT Id, Name, Sex, Age, Address FROM userinfo WHERE Address = :i_address'; -- 给SQL变量赋值,其中 :i_address 是绑定变量,以提高执行效率!
      OPEN o_cur FOR sqlstr USING i_address; -- 给游标变量赋值
    END;
    /-- userinfo 是一个表的名字,如果要查询视图的结果,就将表的名字替换成你的视图的名字,
    -- 然后其SQL语句就根据你的需要去改写就OK啦!
      

  7.   

    存储过程中的execute immediate sqlstr;这句有问题,不需要这句。