问题描述
我是Postgresql的新手,我有一个用T-sql编写的存储过程,我想将其转换为Postgresql。到目前为止,我已经做完了,但是我被困在搜索了很多地方但在互联网上找不到任何东西的地方。
If <someCondi>
BEGIN
...
END
ELSE
BEGIN
GENERATE:
BEGIN try
IF <someCondi>
BEGIN
...
END
ELSE
BEGIN
...
END
END try
BEGIN catch
IF <someCondi>
BEGIN
...
END
if @LoopCount<=2
begin
goto GENERATE
end
END catch
END
我已经转换了大多数存储过程部分,但是我需要其他部分的替换部分。不知道如何转换pgsql中的try catch以及GOTO的替代方法。请帮忙
解决方法
虽然 plpgsql 是一种块结构语言,但不需要在每个if条件或else条件上都开始Begin ... End。但是,它确实需要在If条件和End if之后终止THEN关键字。
如前所述,如果没有“ Try ... Catch”结构。基本上,每个语句都是隐式的“ try语句”,因为任何语句都可能引发异常。捕获部分由块末尾的EXCEPTION部分提供。整个块中的任何错误都将在此处捕获。我建议您花一些时间来使用documentation。以下似乎是您需要的结构。
declare -- assumed as not present in post
loopcount integer := 1; -- initial value my assumption
begin -- procedure (outer block)
while loopcount <= 2 -- generate
loop
begin -- nested block
if <somecondi>
then
...
else
if <somecondi>
then
...
else
...
end if;
end if ;
exception -- catch
when others then
if <somecondi>
then
...
end if;
end; -- nested block
end loop; -- generate
end ; -- procedure (outer block)