能贴出错误号么?过程里当然可以用游标的数据is 和 as 的用法是不一样的,看看PL/SQL的语法就知道了,is是说明下面开始是函数或者过程的实现。而 as是用在定义列别名的。
过程里不可以去调一个包的名称,应该是包里面的过程(过程定义要包含在包头里),游标的定义写在过程里,试试 CREATE OR REPLACE PACKAGE BODY "aaa"."CHECK_BOM" as
procedure checkbom(in_sid in table.SID%type, in_pid in table.PID%type, in_flag in table.flag%type, out_result out boolean) as cursor temp is select sid,pid from item_bom where pid=in_sid and flag=in_flag; begin open temp; out_result:=true; loop fetch temp into v_SID ,v_PID ; if v_SID=in_pid then out_result:=false; RAISERROR ('产品结构有首尾相连,产生循环。', 15, 1); exit; else checkbom(v_SID,in_pid,in_flag,out_result); end if; exit when temp%nofound; end loop; close temp; end; end;
过程里可以使用游标取到的数据
as和is没有什么区别,都是可以的
CREATE OR REPLACE PACKAGE BODY "aaa"."CHECK_BOM" as
procedure checkbom(in_sid in table.SID%type,
in_pid in table.PID%type,
in_flag in table.flag%type,
out_result out boolean)
as
cursor temp is
select sid,pid from item_bom
where pid=in_sid
and flag=in_flag;
begin
open temp;
out_result:=true;
loop
fetch temp into v_SID ,v_PID ;
if v_SID=in_pid then
out_result:=false;
RAISERROR ('产品结构有首尾相连,产生循环。', 15, 1);
exit;
else
checkbom(v_SID,in_pid,in_flag,out_result);
end if;
exit when temp%nofound;
end loop;
close temp;
end;
end;
执行过程和错误代码如下:SQL> declare
2 out_result boolean;
3 begin
4 out_result:=false;
5 Check_bom.checkbom('123456789012','1234567890123456','000001',out_result);
6 end;
7 /
Check_bom.checkbom('123456789012','1234567890123456','000001',out_result);
*
ERROR 位于第 5 行:
ORA-06550: 第 5 行, 第 3 列:
PLS-00905: 对象 aaa.CHECK_BOM 无效
ORA-06550: 第 5 行, 第 3 列:
PL/SQL: Statement ignored根据错误代码来看似乎是说我写的包里有错误
兄台说的对,的确错了^_^
但是改过来还是不对,再帮看看,谢谢!
执行过程和报错如下SQL> edit
已写入文件 afiedt.buf 1 declare
2 out_result boolean;
3 begin
4 out_result:=false;
5 Check_bom.checkbom('123456789012','1234567890123456','000001',out_result);
6* end
SQL> /
declare
*
ERROR 位于第 1 行:
ORA-06550: 第 7 行, 第 0 列:
PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
;
<an identifier><a double-quoted delimited-identifier>
符号 ";" 被替换为 "end-of-file" 后继续。各位再帮忙看看,分不够可以在加!谢谢!
在编译的时候可以用.
即创建存储过程之后.
LINE/COL ERROR
-------- ------------------------------------------
4/3 PLS-00360: 无主体的游标说明需要返回类型
4/3 PL/SQL: Declaration ignored
LINE/COL ERROR
-------- -------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/23 PLS-00905: 对象 MPSDEV.CHECK_BOM 无效
1/23 PLS-00304: 如果没有说明,则无法编译 'CHECK_BOM' 主体