存储过程创建:
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 developer中运行第二种条用方法
须在command window中执行 execute命令