PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara mengirimkan catatan ke fungsi PL/pgSQL?

Ada berbagai opsi, tergantung pada gambaran lengkapnya.
Pada dasarnya, fungsi insert Anda bisa bekerja seperti ini:

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;

Menggunakan jenis baris tampilan , karena NEW di pemicu Anda adalah jenis ini.
Gunakan fungsi SQL sederhana, yang dapat digarisbawahi dan mungkin berkinerja lebih baik.

Panggilan demo:

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

Di dalam pemicu Anda flavored_trig () :

inserted_id := insert_thing(NEW);

Atau, pada dasarnya ditulis ulang:

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

record bukan tipe yang valid di luar PL/pgSQL, ini hanya pengganti generik untuk tipe baris yang belum diketahui di PL/pgSQL) sehingga Anda tidak dapat menggunakannya untuk parameter input dalam deklarasi fungsi.

Untuk fungsi yang lebih dinamis menerima berbagai jenis baris anda dapat menggunakan tipe polimorfik . Contoh:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana melakukan kueri ActiveRecord grup ini di postgres

  2. Bagaimana saya bisa mengelompokkan anak-anak dan orang tua dalam satu kueri?

  3. Petunjuk HINT_PASS_DISTINCT_THROUGH mengurangi jumlah Entitas yang dikembalikan per halaman untuk PageRequest hingga di bawah ukuran halaman yang dikonfigurasi (PostgreSQL)

  4. Tampilkan pesan terakhir dalam susunan pesan

  5. Tetapkan id yang sama ke baris dengan kombinasi data yang sama