Postgres, transporter i funkcije koje menjaju podatke
Način na koji sistem za razmenu podataka hvata zapise za žurnal izmena oslanja se na Records Affected svojstvo Jet OLE DB provajdera.
Na žalost, implementacija ovog svojstva u PostgreSQL nije potpuno identična (defakto, standard i ne postoji).
Usled toga, u cilju logovanja poziva Pg funkcijama koje menjaju podatke, neophodno je funkciju napisati tako da:
- rezultat poziva bude tabela sa jednom kolonom pod nazivom dummy integer tipa
Na primer:
CREATE OR REPLACE FUNCTION bpub.cs3_fixpremestdts( ) RETURNS TABLE(dummy integer) LANGUAGE 'sql' COST 100 VOLATILE ROWS 1000 AS $BODY$ WITH jfrom AS (SELECT U.DTStamp,U.ulid FROM Ulaz AS U INNER JOIN Ulaz AS S ON U.Link=S.UlID WHERE U.DTStamp>=S.DTStamp AND U.DocTip IN (SELECT DTID FROM defDocTip WHERE FPrenos)) UPDATE Ulaz AS AU_U SET DTStamp=jfrom.DTStamp-0.00002 FROM jfrom WHERE AU_U.ulid=jfrom.ulid RETURNING 1; $BODY$;
ili ako funkcija nije prost SQL, već treba ručno vratiti pomenutu kolonu:
CREATE OR REPLACE FUNCTION bpub.cs2_set_vaz_period_bulk( indocid integer) RETURNS TABLE(dummy integer) LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ ... -- kraj RETURN QUERY SELECT 1; END; $BODY$;