有时候,我们只需要建执行执行一次的存储过程。那建匿名代码块是比较好的实现方式。但是在达梦在建包含匿名块的匿名代码块时会有莫名的报错。例如,以下匿名代码块,执行就会报错,但是在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;
标签:begin,end,达梦建,匿名,报错,table,loop
From: https://www.cnblogs.com/study9196/p/18396238