Ich habe eine Reihe von INSERT-Anweisungen mit unterschiedlicher Anzahl von Spalten für ihre jeweiligen Tabellen, muss ich diese Abfragen ausführen, wenn der Datensatz nicht bereits existiert. Ich habe versucht, dies alseinfügen oder aktualisieren in postgresql 9.1
implementierendo $$
begin
IF not exists (SELECT 1 FROM gst_type_customer WHERE name = 'Unregistered') THEN
insert into gst_type_customer(create_date,write_date,create_uid,write_uid,name) values((now() at time zone 'UTC'),(now() at time zone 'UTC'),1,1,'Unregistered');
END IF;
end
$$
obwohl der obige Code funktioniert für einen Großteil der Anfragen, obwohl die Umsetzung würde eine Menge Zeit in Anspruch nehmen, so dass ich dachte, um eine gespeicherte Prozedur zu machen, die ich als
merge_check(insertquery,name[column to check for duplication],value)
nennen könnte, aber ich bin kann die Einfügeabfrage nicht direkt ausführen.
bisher habe ich mit
CREATE OR REPLACE FUNCTION merge_tabla(data text)
RETURNS void AS
$BODY$
BEGIN
execute(data);
END;
$BODY$
LANGUAGE plpgsql
select merge_table("insert into gst_type_customer(name) values('Unregistered')")
aber ich erhalte eine Fehlermeldung, dass
Spalte "insert into gst_type_customer (Name) Werte ('noch nicht registriert')" existiert nicht
kommen
Wie wäre es 'INSERT INTO xxx SELECT ... Werte eingefügt werden ... WHERE NICHT EXISTS (SELECT * FROM xxx WHERE ... Existenz Bedingung ...)'? –
danke für die Antwort, –
danke für die Antwort, ist es nicht wie der Code oben, der prüft, ob es existiert, wenn es nicht dann fügt es, dass Code-Schnipsel funktioniert gut, könnten Sie mir ein Beispiel geben, wenn ich verstehe nicht. –