将 SQL 服务器存储过程转换为 PostgreSQL 函数

Convert SQL Server stored procedure to PostgreSQL function

我是 Postgre 的新手SQL,我有一个用 T-SQL 编写的存储过程,我想将其转换为 PostgreSQL。到目前为止,我已经完成了,但我被困在原地,我搜索了很多地方,但在互联网上没有找到任何东西。

下面是我需要适配PGSQL

的T-SQL存储过程
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 上开始...结束。然而,它确实需要在 If 条件和 End if 之后的 THEN 关键字来终止。
如前所述,如果没有“Try ... Catch”结构。基本上每个语句都是隐含的“try 语句”,因为任何语句都可能抛出异常。 catch 部分由块末尾的 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)