Hallo, gibt es eine Möglicheit den Wert von NEW in einer Triggerfunktion zu splitten? Wenn ich NEW speichere steht in der Tabelle: (10,Komma,9999-12-31) Ich würde nun gerne nur die erste (hier die 10) Zahl für ein auszuführendes SQL-Statement “extrahieren”. Bisher habe ich es mit split_part(), position() in substring() probiert. Die Tabelle und Triggerfunktion liegen NICHT im public-Schema. Gibt es da eine Möglichkeit dieses umzusetzen? Gruß und Dank Rainer
So richtig verstehe ich die Frage nicht. NEW ist doch ein Record der alle Spalten enhält, also mit NEW.column_1 kannst Du doch direkt auf die erste Spalte zugreifen…
Kannst Du die Triggerfunktion mal posten, ohne den Code zu sehen wird es echt schwierig…
Du kannst auf die einzelnen Felder von NEW über deren Namen zugreifen.
Andreas
Hallo,
das mit dem Feldnamen ist mir bekannt, aber den möchte ich variabel halten. Daher kam mir die Idee den Inhalt von NEW in eine Variable zu übernehmen (beim Speichern klappt das ja auch) und dann den ersten Wert zu ermitteln. Die Funktionen führen zum Fehler.
CREATE OR REPLACE FUNCTION lwa.last_change()
RETURNS trigger AS
$BODY$
DECLARE
vPK INTEGER;
vXY TEXT;
BEGIN
vXY = NEW;
vPK = position(',' in vXY);
if (TG_OP = 'UPDATE') THEN
INSERT INTO lwa.tupda(pk_upda,nutzer,datum,zeit,tabelle,feld,wa,wn,pk) VALUES((SELECT MAX(pk_upda)+1 FROM lwa.tupda),current_user,now(),now(),TG_ARGV[0],TG_ARGV[1],OLD,NEW,vXY);
else
INSERT INTO lwa.tupda(pk_upda,nutzer,datum,zeit,tabelle,feld,wa,wn,pk) VALUES((SELECT MAX(pk_upda)+1 FROM lwa.tupda),current_user,now(),now(),TG_ARGV[0],TG_ARGV[1],'',NEW,vXY);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Gruß und Dank Rainer