PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przekazać rekord do funkcji PL/pgSQL?

Istnieją różne opcje, w zależności od pełnego obrazu.
Zasadniczo funkcja wstawiania może działać tak:

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;

Korzystanie z typu wiersza widoku , ponieważ NEW w wyzwalaczu jest tego typu.
Użyj prostej funkcji SQL, która może być wbudowana i może działać lepiej.

Rozmowa demonstracyjna:

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

Wewnątrz wyzwalacza flavored_trig () :

inserted_id := insert_thing(NEW);

Albo po prostu przepisane:

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

record nie jest prawidłowym typem poza PL/pgSQL, to tylko ogólny symbol zastępczy dla jeszcze nieznanego typu wiersza w PL/pgSQL), więc nie można go użyć jako parametru wejściowego w deklaracji funkcji.

Aby uzyskać bardziej dynamiczną funkcję akceptującą różne typy wierszy możesz użyć typ polimorficzny . Przykłady:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę uzyskać dostęp do domyślnej wartości kolumny Postgres za pomocą ActiveRecord?

  2. Błąd:Musisz zainstalować co najmniej jeden pakiet postgresql-client-<wersja>

  3. Eksportuj tylko widoki w Postgres

  4. PG::ForeignKeyViolation:BŁĄD:aktualizacja lub usunięcie w tabeli xxx narusza ograniczenie klucza obcego

  5. Procedura wyzwalania Postgresa przy wstawianiu wykorzystująca dane we wstawionych polach do wstawienia obliczonych danych w innym polu