Mert a formatos megoldásod dollar quotingot használ, ami a jobban olvasható, biztosabb, egyszóval a javasolt megoldás.
Ha visszamegyünk az eredeti statikus, működő insert statementedhez:
INSERT INTO tesztsema.table (azonosito, nev) SELECT 2332,'xyz';
Az volt a cél, hogy ezt a stringet dinamikusan előállítsd, és átadd az EXECUTE statementnek.
Azt pedig úgy tudod megtenni, hogy aposztrófokat is odateszed a példában az xyz köré.
A '||name csak annyit csinál, hogy a name értékét hozzáfűzi a stringhez, de aposztrófok ettől még nem lesznek körülötte, és text típusnál ez szükséges. Szóval, vagy te fűzöd oda (nem javasolt, csak a probléma megértéséért említettem az előző hozzászólásomban), vagy dollar quotingot vagy quote_literal() / quote_ident() fgv-t használsz.
Másikhoz. Ilyen szerkezet nincs, hogy IF EXECUTE
Olyan tudsz csinálni, hogy
EXECUTE STATEMENT into VAR és a VAR értékét vizsgálod IF-fel.