as
begin
 select * from dd;
end;这样一个简单的存储过程,编译的错误为:Invalid(Ln,Col);(4,5)
这是什么原因呢?

解决方案 »

  1.   

    oracle中的select 语句不能返回结果集(不同于sqlserver),如果返回结果集,需要使用游标变量!
      

  2.   

    存储过程中除了游标不能用单个 select * from dd
    as
    d_value   dd%rowtype;
    begin
    select * into d_value from dd;
    end;
      

  3.   

    as
    begin
     execute immediate 'select * from dd';
    end;
      

  4.   

    二楼说的没错,Oracle中不能直接返回一个select结果集.
    你可以先在包中定义一个游标变量.
    如:
    CREATE OR REPLACE PACKAGE pkg_cursor 
    as
    type return_result is ref cursor;
    end;
    /
    然后在存储过程中调用游标变量,返回select结果集.
    create or replace procedure pro_name
    (v_cursor   out pkg_cursor.reture_result)
    begin
     open v_cursor for
       select * from dd;
    end pro_name;
    /