Migrating procedures is not word substitution: you rewrite block anatomy. Use this checklist when reviewing each object.
Compared anatomy
SQL Server
CREATE PROCEDURE dbo.Example @Id INT AS
BEGIN
DECLARE @x INT = 0;
SELECT @x = COUNT(*) FROM t WHERE id = @Id;
IF @@ROWCOUNT = 0 RAISERROR('empty', 16, 1);
ENDPostgreSQL
CREATE OR REPLACE PROCEDURE example(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 'empty'; END; $$;