今天第一天学oralce存储过程,刚看了一会网上找到的资料。我现在就想写一个能在emp表里查出所有记录的一段存储过程,请问我应该咋写……
我写了一段,执行不了:
create or replace procedure query_emp
as
select * from emp;
begin
  query_emp;
end;
请问我应该怎么写,怎么执行……谢谢各位

解决方案 »

  1.   

    过程里面不能直接select * from emp;
    必须是select * into ... from emp。
    create or replace procedure query_emp
    as
    type emp_table is table of emp%rowtype;
    emps emp_table;
    begin  
    select * bulk collect into emps from emp;
    for i in 1..emps.count loop
    dbms_output.put_line(emps(i).ename ||','||emps(i).job);
    end loop; 
    end;
      

  2.   

    写法已经有人回复了。至于执行方法,procedure和function不同,function可以在SQL语句直接调用,但是procedure不可以。只能使用PL/SQL来调用。sqlplus:
    exec query_emp;sql tools:【example toad & pl sql developer etc..】declare
    begin
    query_emp('如果有参数的话'); 
    end;
      

  3.   

    oracle 与sqlServer不同要实现返回记录集必须使用游标来实现
      

  4.   

    CREATE OR REPLACE PROCEDURE GetDataBugCarList
     IS
       TYPE myrctype IS REF CURSOR;
       strString varchar2(30000):='';--sql语句
       p_rc myrctype;
       begin
      --open p_rc for
      strString :='select * from emp';
     OPEN p_rc FOR strString;
     end;