调用存储过程报错,ORA-06576: 不是有效的函数或过程名

dex14 2016-06-23 10:40:58
创建存储过程的时候没有报错,如下:
create procedure classifiedQuery (p_cur out sys_refcursor, input varchar)
as
begin
open p_cur for select * from book where kind = input;
exception
when no_data_found then
dbms_output.put_line('无搜索结果');
end;

调用:
call procedure classifiedQuery ('教材');

报错:
在行 1 上开始执行命令时出错:
call procedure classifiedQuery ('教材')
错误报告:
SQL 错误: ORA-06576: 不是有效的函数或过程名


初学者,求指导,谢谢各位!
...全文
6869 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dex14 2016-06-24
  • 打赏
  • 举报
回复
引用 2 楼 u011575570 的回复:
call classifiedQuery ('教材')就可以了
输入:call classifiedQuery('教材'); 报错:调用 'CLASSIFIEDQUERY' 时参数个数或类型错误 是因为之前创建过程里有个p_cur out sys_refcursor参数吗……这个应该输什么呢
rick-he 2016-06-24
  • 打赏
  • 举报
回复
call classifiedQuery ('教材')就可以了
卖水果的net 2016-06-24
  • 打赏
  • 举报
回复
存储过程没有问题,调用的不对啊。
dex14 2016-06-24
  • 打赏
  • 举报
回复
引用 6 楼 u011575570 的回复:
你有两个参数,并且是输入输出的,所有个数不对。 如4楼。 但我想输出的是select * from book,这个查询结果可以直接保存在变量里吗? 你这样写的话,*就只有一个字段,不然还是报错。
那应该怎么写呢?求指导,谢谢!
rick-he 2016-06-24
  • 打赏
  • 举报
回复
引用 3 楼 dex14 的回复:
[quote=引用 2 楼 u011575570 的回复:] call classifiedQuery ('教材')就可以了
输入:call classifiedQuery('教材'); 报错:调用 'CLASSIFIEDQUERY' 时参数个数或类型错误 是因为之前创建过程里有个p_cur out sys_refcursor参数吗……这个应该输什么呢[/quote] 你有两个参数,并且是输入输出的,所有个数不对。 如4楼。 但我想输出的是select * from book,这个查询结果可以直接保存在变量里吗? 你这样写的话,*就只有一个字段,不然还是报错。
dex14 2016-06-24
  • 打赏
  • 举报
回复
引用 4 楼 pobaby 的回复:
CREATE OR REPLACE PROCEDURE XYZXK.TEST(INPARM  IN VARCHAR2,
                                       OUTPARM OUT VARCHAR2) IS
BEGIN
  OUTPARM := 123;
  DBMS_OUTPUT.PUT_LINE(OUTPARM);
END TEST;
SET SERVEROUTPUT ON ;
DECLARE
  OUTPARM VARCHAR2(255);
BEGIN
  TEST('123', OUTPARM);
END;
/
当过程中含有输出参数时,调用时必须通过BEGIN END块,不能通过EXEC或CALL调用;
但我想输出的是select * from book,这个查询结果可以直接保存在变量里吗?
pobaby 2016-06-24
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE XYZXK.TEST(INPARM  IN VARCHAR2,
                                       OUTPARM OUT VARCHAR2) IS
BEGIN
  OUTPARM := 123;
  DBMS_OUTPUT.PUT_LINE(OUTPARM);
END TEST;
SET SERVEROUTPUT ON ;
DECLARE
  OUTPARM VARCHAR2(255);
BEGIN
  TEST('123', OUTPARM);
END;
/
当过程中含有输出参数时,调用时必须通过BEGIN END块,不能通过EXEC或CALL调用;
引用 楼主 dex14 的回复:
创建存储过程的时候没有报错,如下: create procedure classifiedQuery (p_cur out sys_refcursor, input varchar) as begin open p_cur for select * from book where kind = input; exception when no_data_found then dbms_output.put_line('无搜索结果'); end; 调用: call procedure classifiedQuery ('教材'); 报错: 在行 1 上开始执行命令时出错: call procedure classifiedQuery ('教材') 错误报告: SQL 错误: ORA-06576: 不是有效的函数或过程名 初学者,求指导,谢谢各位!

17,382

社区成员

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

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