寫儲存過程中遇到的問題(一)—— else if和elsif
阿新 • • 發佈:2018-12-19
編譯時報錯,然後發現裡面有這麼一段程式碼:
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 ;