Ich habe diese Funktion in meiner Datenbank:
%Vor% Aber sobald ich versuche, es zu benutzen, heißt es, dass ich PERFORM
verwenden muss, wenn ich die Ergebnisse verwerfen möchte! Das Problem hier ist, dass ich nicht will! Ich möchte sie in der articulo
Zeile, die ich deklariert habe!
Ich benutze diese Aussage:
%Vor%Und der Fehler, den ich bekomme, ist 42601, ein Syntaxfehler! Wie könnte es sein, wenn ich die IDE verwende, um es zu erstellen? Irgendeine Idee über das Problem?
Im plpgsql-Code löst SELECT
ohne Ziel einen Fehler aus. Aber offensichtlich nicht willst du SELECT INTO
, du willst nur den Status von FOUND
setzen. Sie würden PERFORM
verwenden / a> dafür.
Besser, , verwenden Sie IF EXISTS ...
. Betrachten Sie diese Neufassung Ihrer Funktion:
Über EXISTS
:
Der andere wichtige Punkt :
RETURNING
-Klausel von die INSERT
-Anweisung anstelle einer zusätzlichen SELECT
. Verwenden Sie in Postgres 9.5 oder höher lieber stattdessen einen UPSERT: ( INSERT ... ON CONFLICT DO NOTHING
).
Sie hätten UNIQUE
Einschränkungen für "Articulo"("Nombre", "idTipo", "idFamilia")
und "ArticuloMarca"("idArticulo", "idMarca")
und dann:
Dies ist schneller, einfacher und zuverlässiger. Die hinzugefügten Schleifen schließen verbleibende Racebedingungen mit gleichzeitigem Schreiben aus (während sie kaum Kosten hinzufügen). Ohne gleichzeitige Schreibvorgänge können Sie vereinfachen. Detaillierte Erklärung:
Nebenbei: Verwenden Sie legale, kleingeschriebene Bezeichner, um all die hässlichen doppelte Zitate .
Tags und Links postgresql function plpgsql select-into