我正在使用Oracle Forms Builder 11
我的代码:
declare
type myType is varray(3000) of my_table%rowtype;
myAsset myType:=myType();
i number;
n number;
exNoInvNum exception;
begin
go_block('my_block');
first_record;
i:=1;
loop
myAsset.extend();
myAsset(i).hqId:=:my_block.hqId;
myAsset(i).deptId:=:my_block.deptId;
myAsset(i).invNum:=:my_block.invNum;
exit when :system.last_record='TRUE';
i:=i+1;
next_record;
end loop;
go_block('my_block');
first_record;
loop
if (:my_block.linkedInvNum is not null) then
n:=0;
select count(*) into n
from my_table s
where s.invNum=:my_block.linkedInvNum
and s.hqId=:my_block.hqId
and (s.deptId=:my_block.deptId
or (s.deptId is null and :my_block.deptId is null));
if (n=0) then
for i in myAsset.first .. myAsset.last loop
if (myAsset(i).invNum=:my_block.linkedInvNum
and myAsset(i).hqId=:my_block.hqId
and (myAsset(i).deptId=:my_block.deptId
or (myAsset(i).deptId is null and :my_block.deptId is null))) then
n:=1;
end if;
end loop;
end if;
if (n=0) then
raise exNoInvNum;
else
commit_form;
go_block('my_table');
clear_block(no_validate); set_item_property('my_block.generate_excel',ENABLED,property_true); set_item_property('my_block.process_data',ENABLED,property_false);
end if;
end if;
exit when :system.last_record='TRUE';
next_record;
end loop;
exception
when exNoInvNum then
message('No existing inventory number!');
when others then
null;
end;
end;
我得错误103广告第2行第1列:遇到符号“END”
我检查了我的代码是否有拼写错误,缺少半字节和类似内容,但看起来一切都很好。
有什么想法吗?
答案 0 :(得分:2)
我收到错误103广告第2行,第1列:遇到符号"结束"
嗯,PL / SQL块中还有一个额外的 END
关键字。
end; end;
匿名 PL / SQL块的语法是:
DECLARE
...
BEGIN
...
EXCEPTION
...
END;
而且,这个:
when others then
null;
本身就是您代码中的错误。
当其他人几乎总是 BUG ,除非后面紧跟 RAISE 。请记住,对于错误,RAISE –> CATCH –> HANDLE
。为什么我们需要一个异常处理程序?要捕获错误,请记录它们(可选),最后对它们做一些事情。