编译时报错,然后发现里面有这么一段代码:
set define off;
declare
v_nullable varchar(1) := '';
begin
if fc_IsTableExists('TCAPCURRENTS_INPUT') then
if not fc_IsColExists('TCAPCURRENTS_INPUT', 'L_CONTRACTSERIALNO') then
if fc_IsColExists('TCAPCURRENTS_INPUT', 'L_ACCOSERIALNO') then
execute immediate 'alter table TCAPCURRENTS_INPUT add (L_CONTRACTSERIALNO NUMBER(10) )';
execute immediate 'update TCAPCURRENTS_INPUT set L_CONTRACTSERIALNO= L_ACCOSERIALNO';
execute immediate 'alter table TCAPCURRENTS_INPUT drop column L_ACCOSERIALNO';
end if;
else if fc_IsColExists('TCAPCURRENTS_INPUT', 'L_ACCOSERIALNO') then
execute immediate 'update TCAPCURRENTS_INPUT set L_CONTRACTSERIALNO= L_ACCOSERIALNO';
execute immediate 'alter table TCAPCURRENTS_INPUT drop column L_ACCOSERIALNO';
end if;
end if;
end;
/
set define on;
问题就是出在了else if这个问题上了。以上脚本通过存储过程编译必然是会报错的。
解决途径:
1、比原先多加了一个end if;就可以了
if then
else if then
end if;
end if;
2、else if直接改成 elsif 就可以了,也不需要加end if;了。
if then
elsif then
end if;