存储过程调用不成功,求解决

a21572642 2012-12-27 10:43:58
存储过程创建:
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
...全文
464 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinan9 2012-12-27
  • 打赏
  • 举报
回复
引用 6 楼 yinan9 的回复:
可在pl/sql语句块中调用 begin procedure_name(para); end; 或者 execute命令exec execute prodedure_name;
补充下,如果你在pl/sql developer中运行第二种条用方法 须在command window中执行 execute命令
yinan9 2012-12-27
  • 打赏
  • 举报
回复
可在pl/sql语句块中调用 begin procedure_name(para); end; 或者 execute命令exec execute prodedure_name;
睿智天成 2012-12-27
  • 打赏
  • 举报
回复
create procedure procedure_test is pp varchar2(20); begin select * into pp from dual; end; 存储过程在进行查询需要有承载变量。
a21572642 2012-12-27
  • 打赏
  • 举报
回复
引用 3 楼 yinan9 的回复:
楼上正解 pl/sql,存储过程,或者函数中 须是select ..into的语法 举例来说 declare v1 number; v2 number; begin select c1,c2 into v1,v2 from table; end; 其实你这样理解就好,在存储过程中,单纯的select是没有意义的,因为不会像常规sql那样返回数据……
我把里面的东西改成update了,这次用begin procedure_test; end;调用好使了,查表后,也确实生效了。但是call方法依然不好使,还是同样的报错,为什么?
yinan9 2012-12-27
  • 打赏
  • 举报
回复
楼上正解 pl/sql,存储过程,或者函数中 须是select ..into的语法 举例来说 declare v1 number; v2 number; begin select c1,c2 into v1,v2 from table; end; 其实你这样理解就好,在存储过程中,单纯的select是没有意义的,因为不会像常规sql那样返回数据集呈现。 在存储过程中的select值通常都作为变量进行处理,所以你需要定义变量,使用into关键字去盛装select出来的字段,且只能是一行。如有多行,则需要用游标处理。
thelazyman 2012-12-27
  • 打赏
  • 举报
回复
调用过程 SQL> exec _test;
shiyiwan 2012-12-27
  • 打赏
  • 举报
回复
是因为你的存储过程有问题,没有编译成功拉。 在存储过程里面select 需要有变量承接。 比如 create procedure procedure_test is v varchar2(20); begin select 'abc' into v from dual; end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧