Transactions 如何在PostgreSQL中实现MSSQL的SAVE TRAN?

Transactions 如何在PostgreSQL中实现MSSQL的SAVE TRAN?,transactions,database-migration,plpgsql,postgresql-11,Transactions,Database Migration,Plpgsql,Postgresql 11,期待在PostgreSQL中找到等效的代码,特别是如何实现SAVE TRAN、@@tracount和@@error 以下代码在MSSQL中,必须迁移: CREATE PROCEDURE [APPLY_TRANSCO_CASH] AS BEGIN DECLARE @trancount int, @error int, @rowcount int, @ret int SELECT @trancount = @@trancount IF(@trancount

期待在PostgreSQL中找到等效的代码,特别是如何实现
SAVE TRAN
@@tracount
@@error

以下代码在MSSQL中,必须迁移:

CREATE PROCEDURE [APPLY_TRANSCO_CASH]
  AS
 BEGIN
DECLARE 
    @trancount int,
    @error int,
    @rowcount int,
    @ret int
 SELECT @trancount = @@trancount
IF(@trancount <> 0)
BEGIN   
    SAVE TRAN tran_APPLY_TRANSC
END
ELSE
BEGIN
    BEGIN TRAN tran_APPLY_TRANSC
END

UPDATE ELIOT_TMp
SET Country = 'v'
SELECT @error = @@error, @rowcount = @@rowcount
IF (@error <> 0)
BEGIN 
    SELECT @ret = -1
    GOTO Error
END
SELECT @ret = @rowcount
GOTO Normal_End

Normal_End:
    IF (@trancount=0)
    BEGIN
        COMMIT TRANSACTION
    END
    RETURN @ret
Error:

    ROLLBACK TRANSACTION tran_APPLY_TRANSC
    RETURN @ret
创建过程[应用转换现金]
作为
开始
声明
@trancount int,
@错误int,
@行计数int,
@网内
选择@trancount=@@trancount
如果(@trancount 0)
开始
保存传输应用传输
结束
其他的
开始
开始传输传输应用传输
结束
更新ELIOT_TMp
设置国家='v'
选择@error=@@error,@rowcount=@@rowcount
如果(@error 0)
开始
选择@ret=-1
转到错误
结束
选择@ret=@rowcount
转到正常端
正常端:
如果(@trancount=0)
开始
提交事务
结束
返回@ret
错误:
回滚事务传输应用传输
返回@ret

假设
save tran
建立了一个保存点,我认为等价物是:

create procedure apply_transco_cash(inout retcode int)
AS
$$
begin

  UPDATE eliot_tmp
    SET Country = 'v';

  -- this returns the number of affected rows
  GET DIAGNOSTICS recode = ROW_COUNT;

  commit;
    
exception 
   when others then 
     retcode := -1;
end;
$$
language plpgsql;
为了处理错误,可以使用in-PL/pgSQL自动建立一个隐式保存点(在本例中“覆盖”从第一个
开始的整个过程)。无需显式设置保存点(并且不能回滚到PL/pgSQL中的保存点)

GET DIAGNOSTICS
检索受上一条语句影响的行数