有時候,我們只需要建執行執行一次的存儲過程。那建匿名代碼塊是比較好的實現方式。但是在達夢在建包含匿名塊的匿名代碼塊時會有莫名的報錯。例如,以下匿名代碼塊,執行就會報錯,但是在oracle執行是可以的。
begin
for f in(
select table_name from user_tables
)
loop
begin
dbms_output.enable();
dbms_output.put_line(f.table_name);
EXCEPTION
WHEN OTHERS THEN null;
end;
end loop;
commit;
end;

經過多次試驗,發現建達夢的包含匿名塊的匿名代碼塊時,無論是否有局部變量,都需要加declare。還有,循環里面的匿名塊中的loop和begin要隔開一行,才不會報錯。不報錯的存儲過程如下
--要有declare
declare
begin
for f in(
select table_name from user_tables
)
loop
--要有loop后面要空一行再寫begin
begin
dbms_output.enable();
dbms_output.put_line(f.table_name);
EXCEPTION
WHEN OTHERS THEN null;
end;
end loop;
commit;
end;
浙公網安備 33010602011771號