CREATE OR REPLACE procedure wlb_proc is
begin
select * from bed_class_dict;
end wlb_proc;警告: 创建的过程带有编译错误各位大哥大姐这是为什么啊!!
小弟是新手.

解决方案 »

  1.   

    CREATE OR REPLACE procedure wlb_proc is 
    begin 
    select * from bed_class_dict; 
    end wlb_proc;改成这样
    CREATE OR REPLACE procedure wlb_proc is 
    str varchar2(50);
    begin
    select 'hello world!' into str from dual;
    dbms_output.put('hello oracle!');
    end wlb_proc;
      

  2.   

    create or replace procedure insertPerson(pname in varchar2,page in number) as
    begin
    insert into persons values (person_seq.nextVal,pname,page);
    end insertPerson;
      

  3.   

    CREATE OR REPLACE procedure wlb_proc is 
    begin 
    select * from bed_class_dict; 
    end wlb_proc; Oracle存储过程不像Mssql,里面不能直接查询
    如果需要查询就用游标返回
    create or replace procedure wlb_proc(cur out sys_refcursor)
     as
     begin
     open cur for select * from bed_class_dict;  end;
      

  4.   

    大哥,怎么用 exec wlb_proc 运行后没有数据出来,还报错
    SQL> exec wlb_proc;
    BEGIN wlb_proc; END;      *
    第 1 行出现错误:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00306: 调用 'WLB_PROC' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored
      

  5.   

    在PL/SQL语句中,SELECT必须和INTO配合使用,就是说,只在出现了SELECT,就必须有INTO,比如对于你的语句,改为用scott.emp表做例子,可以这样写CREATE OR REPLACE procedure wlb_proc is 
      v_sal NUMBER(10);
    begin 
    select sal
      into v_sal
     from scott.emp
     where empno = 7369; 
    end wlb_proc; 上面为什么要用where,因为SELECT 语句查询的结果必须为一条,如果是0条,就会出现NO_DATA_FOUND的错误,如果是两条或以上,就会出现TOO_MANY_ROWS的错误。如果要处理多条数据,可以用游标(CURSOR).
      

  6.   

    我知道游标是可以一条一条的处理数据,我用存储过程的最终目的是可以像sql server中的存储过程一样最后可以返回多条数据。
    如sql server中的存储过程:
    create proc wlb_proc(@flag varchar(20))as
    begin
    -----------------------
    --这里可以是任何处理语句
    insert into ....
    update ....
    --------------------------最后是一条返回多条数据的 select  语句
    select * from bed_class_dict
    return
    end
      

  7.   

    用语句
    exec wlb_proc 
    可以查询出 表 bed_class_dict 中的多条数据
      

  8.   


    --Oracle不能那样的
    存储过程主要是业务处理逻辑,Insert、update、delete等等
    查询没有什么意义
      

  9.   

    create or replace procedure wlb_proc(cur out sys_refcursor) 
    as 
    begin 
    open cur for select * from bed_class_dict; end; 那这个用游标的存储过程怎么返回数据。我是想问为什么这里用execute wlb_proc会报错?
    怎么使用这个存储过程
      

  10.   

    --tt.sql的内容如下
    create or replace procedure wlb_proc
    as 
    cursor cur1 
    is 
    select * from dept;
    rec dept%rowtype;
    begin 
    for rec in cur1
    loop
    dbms_output.put_line(rec.deptno||' '||rec.dname||' '||rec.loc);
    end loop;
    end;
    /SQL> @tt.sqlProcedure created.SQL> set serveroutput on
    SQL> exec wlb_proc
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTONPL/SQL procedure successfully completed.
      

  11.   

    换个写法
    前面写的那个有点麻烦 还得指定每条记录的字段
    SQL> create or replace procedure pro_test(result out sys_refcursor)
      2  is
      3  begin
      4  open result for select * from dept;
      5  end;
      6  /Procedure created.SQL> variable b refcursor
    SQL> exec pro_test(:b);PL/SQL procedure successfully completed.SQL> print :b;    DEPTNO DNAME          LOC
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTONSQL>