日期:2014-05-17  浏览次数:20960 次

存储过程调用不成功,求解决
存储过程创建:
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

------解决方案--------------------
是因为你的存储过程有问题,没有编译成功拉。
在存储过程里面select 需要有变量承接。
比如
create procedure procedure_test is 
v varchar2(20);
begin
  select 'abc' into v from dual; 
end;
------解决方案--------------------
楼上正解
pl/sql,存储过程,或者函数中 须是select ..into的语法
举例来说
declare
v1 number;
v2 number;
begin
select c1,c2
 into  v1,v2
 from table;
end;
其实你这样理解就好,在存储过程中,单纯的select是没有意义的,因为不会像常规sql那样返回数据集呈现。
在存储过程中的select值通常都作为变量进行处理,所以你需要定义变量,使用into关键字去盛装select出来的字段,且只能是一行。如有多行,则需要用游标处理。

------解决方案--------------------
create procedure procedure_test is 
pp varchar2(20);
begin
  select * into pp from dual; 
end; 
存储过程在进行查询需要有承载变量。
------解决方案--------------------
引用:
可在pl/sql语句块中调用
begin
procedure_name(para);
end;
或者 execute命令exec
execute prodedure_name;

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