存储过程创建:
create procedure procedure_test is 
begin
  select * from dual; 
end;调用方法1:
call procedure_test
报错:not a valid function or procedure name调用方法2:
begin
procedure_test;
end;
报错:
ORA-06550:line 2, column 1:
PLS-00905:object TEST.PROCEDURE_TEST is invalid
ORA-06550:line 2, column 1:
PL/SQL:Statement ignored

解决方案 »

  1.   

    是因为你的存储过程有问题,没有编译成功拉。
    在存储过程里面select 需要有变量承接。
    比如
    create procedure procedure_test is 
    v varchar2(20);
    begin
      select 'abc' into v from dual; 
    end;
      

  2.   

    调用过程
    SQL> exec _test;
      

  3.   

    楼上正解
    pl/sql,存储过程,或者函数中 须是select ..into的语法
    举例来说
    declare
    v1 number;
    v2 number;
    begin
    select c1,c2
     into  v1,v2
     from table;
    end;
    其实你这样理解就好,在存储过程中,单纯的select是没有意义的,因为不会像常规sql那样返回数据集呈现。
    在存储过程中的select值通常都作为变量进行处理,所以你需要定义变量,使用into关键字去盛装select出来的字段,且只能是一行。如有多行,则需要用游标处理。
      

  4.   

    我把里面的东西改成update了,这次用begin procedure_test; end;调用好使了,查表后,也确实生效了。但是call方法依然不好使,还是同样的报错,为什么?
      

  5.   

    create procedure procedure_test is 
    pp varchar2(20);
    begin
      select * into pp from dual; 
    end; 
    存储过程在进行查询需要有承载变量。
      

  6.   

    可在pl/sql语句块中调用
    begin
    procedure_name(para);
    end;
    或者 execute命令exec
    execute prodedure_name;
      

  7.   

    补充下,如果你在pl/sql developer中运行第二种条用方法
    须在command window中执行 execute命令