有时候,我们只需要建执行执行一次的存储过程。那建匿名代码块是比较好的实现方式。但是在达梦在建包含匿名块的匿名代码块时会有莫名的报错。例如,以下匿名代码块,执行就会报错,但是在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;
posted on 2024-09-04 13:00  追求完美9196  阅读(135)  评论(0)    收藏  举报