sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan sender man en post til en PL/pgSQL-funktion?

Der er forskellige muligheder, afhængigt af det komplette billede.
Din indsættelsesfunktion kunne grundlæggende fungere sådan her:

CREATE FUNCTION insert_thing (_thing flavored_view)
   RETURNS int AS
$func$
   INSERT INTO things (name) VALUES ($1.name) -- plus 30 more columns
   RETURNING id;
$func$ LANGUAGE sql;

Brug af rækketypen for visningen , fordi NEW i din trigger er af denne type.
Brug en simpel SQL-funktion, som kan indlejres og muligvis yder bedre.

Demoopkald:

SELECT insert_thing('(1, foo, 1, bar)');

Inde i din trigger flavored_trig () :

inserted_id := insert_thing(NEW);

Eller dybest set omskrevet:

IF TG_OP = 'INSERT' THEN
   INSERT INTO flavored_things(thing_id, flavor)
   VALUES (insert_thing(NEW), NEW.flavor);
   RETURN NEW;
ELSIF ...

record er ikke en gyldig type uden for PL/pgSQL, det er bare en generisk pladsholder for en endnu ukendt rækketype i PL/pgSQL), så du kan ikke bruge den til en inputparameter i en funktionserklæring.

For en mere dynamisk funktion, der accepterer forskellige rækketyper du kan bruge en polymorf type . Eksempler:



  1. Ny MariaDB AX-udgivelse med MariaDB ColumnStore 1.1.3 GA

  2. Sådan konverteres små bogstaver til store bogstaver i MySQL

  3. Sådan modelleres for nem databasevedligeholdelse

  4. Sådan rettes "datediff-funktionen resulterede i et overløb"-fejl i SQL Server