create or replace package body Alan_Test_PKG is FUNCTION FUNTest2 RETURN NUMBER IS V_SEQ NUMBER DEFAULT 1; BEGIN RETURN V_SEQ; END FUNTest2; procedure PROC_Test IS CURSOR CUR1 IS SELECT * FROM tab WHERE id=63; BEGIN FOR CURR IN CUR1 LOOP FUNTest2(); END LOOP ; END PROC_Test;
FUNTest2(); // 报错 -- 这句, function 是返回值的,你直接调整用一个函数是不可以的,应该写成如下形式select FUNTest2() into myvar from dual -- 或myvar := FUNTest2();
create or replace package Alan_Test_PKG is FUNCTION FUNTest2 RETURN NUMBER; procedure PROC_Test; end;
create or replace package body Alan_Test_PKG is FUNCTION FUNTest2 RETURN NUMBER IS V_SEQ NUMBER DEFAULT 1; BEGIN RETURN V_SEQ; END FUNTest2; procedure PROC_Test IS CURSOR CUR1 IS SELECT * FROM tab WHERE id=63; BEGIN FOR CURR IN CUR1 LOOP FUNTest2(); END LOOP ; END PROC_Test;
楼主的程序有几个错误: 1.没有定义包头 2.select *from table where id =63;中table是关键字 3.调用函数 时必须有变量来接收返回值, 例如:declare vars number; begin vars:=FUNTest2; --或 select FUNTest2 into vars from dual; end; 如果带有出参的话,还要在函数后面加括号放参数。
FUNCTION FUNTest2 RETURN NUMBER IS V_SEQ NUMBER DEFAULT 1; BEGIN RETURN V_SEQ; END FUNTest2;
procedure PROC_Test IS CURSOR CUR1 IS SELECT * FROM tab WHERE id=63; BEGIN FOR CURR IN CUR1 LOOP FUNTest2(); END LOOP ; END PROC_Test;
end;
1.必须要定义包头才行
2.在包里面的每个函数或者存储过程, end 需要end当前的函数或者存储过程。 (忘了这是不是必须的了。 但是 出于代码可读性,也建议这么做)
3. table 好像是关键字吧?
FUNTest2(); // 报错
-- 这句, function 是返回值的,你直接调整用一个函数是不可以的,应该写成如下形式select FUNTest2() into myvar from dual -- 或myvar := FUNTest2();
FUNCTION FUNTest2 RETURN NUMBER;
procedure PROC_Test;
end;
create or replace package body Alan_Test_PKG is
FUNCTION FUNTest2 RETURN NUMBER IS V_SEQ NUMBER DEFAULT 1; BEGIN RETURN V_SEQ; END FUNTest2;
procedure PROC_Test IS CURSOR CUR1 IS SELECT * FROM tab WHERE id=63; BEGIN FOR CURR IN CUR1 LOOP FUNTest2(); END LOOP ; END PROC_Test;
end;1.必须要定义包头才行,定义
2.在包里面的每个函数或者存储过程,end 需要end当前的函数或者存储过程。
1.没有定义包头
2.select *from table where id =63;中table是关键字
3.调用函数 时必须有变量来接收返回值,
例如:declare
vars number;
begin
vars:=FUNTest2;
--或
select FUNTest2 into vars from dual;
end;
如果带有出参的话,还要在函数后面加括号放参数。