Migrar procedures não é trocar palavras: é reescrever a anatomia do bloco. Use este checklist ao revisar cada objeto.
Anatomia comparada
SQL Server
CREATE PROCEDURE dbo.Exemplo @Id INT AS
BEGIN
DECLARE @x INT = 0;
SELECT @x = COUNT(*) FROM t WHERE id = @Id;
IF @@ROWCOUNT = 0 RAISERROR('vazio', 16, 1);
ENDPostgreSQL
CREATE OR REPLACE PROCEDURE exemplo(p_id int) LANGUAGE plpgsql AS $$ DECLARE x int := 0; BEGIN SELECT COUNT(*) INTO x FROM t WHERE id = p_id; IF NOT FOUND THEN RAISE EXCEPTION 'vazio'; END; $$;
Checklist do DBA
Parâmetros: @nome → nome com tipo, sem @ no corpo PL/pgSQL.
Variáveis: DECLARE no topo do bloco; := para atribuição.
Conjuntos: SET @x = (SELECT ...) → SELECT ... INTO x.
Erros: RAISERROR/THROW → RAISE EXCEPTION.
Retorno: RETURN sem valor no fim de procedures que não retornam resultset.