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

PostgreSQL mengembalikan fungsi dengan Tipe Data Kustom

Ini hanya harus bekerja. enum seharusnya tidak menjadi masalah. Diuji dengan Postgres 9.1 dan 9.2

CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');
CREATE TEMP TABLE venue (id int PRIMARY KEY, building_code building_code);
INSERT INTO venue VALUES (1, 'ENG');

CREATE OR REPLACE FUNCTION room_code(_id int) --!
  RETURNS building_code AS 
$func$
SELECT building_code FROM venue v WHERE v.id = $1 -- !
$func$ LANGUAGE SQL;

SELECT * FROM room_code(1);

Kecuali ...

  • Dalam versi sebelum 9.2 Anda hanya dapat menggunakan parameter posisi (numerik) ($1 ) dalam fungsi SQL (tidak seperti fungsi plpgsql).
    Dalam 9.2+ nama kolom akan didahulukan, sehingga WHERE klausa kode asli Anda akan selalu BENAR dan semua baris akan memenuhi syarat - kecuali bahwa fungsi Anda hanya mengembalikan yang pertama, karena tidak mengembalikan SETOF building_code .
    Mengganti nama parameter Anda atau menggunakan parameter posisi atau, lebih disukai, keduanya.
    Jika Anda harus menggunakan nama parameter yang bertentangan, Anda dapat mengganti preferensi dengan menggunakan nama fungsi untuk memenuhi syarat parameter. Seperti:

    ... WHERE v.id = room_code.id
    
  • Anda tidak boleh menggunakan nama jenis sebagai nama kolom.

  • Anda tidak boleh menggunakan nama kasus campuran yang tidak dikutip seperti roomCode , yang akan dilipat menjadi huruf kecil, kecuali jika Anda mengutip dua kali:"roomCode" .

->SQLfiddle dengan 3 varian




  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 cara kerja tampilan keamanan_barrier PostgreSQL?

  2. Ekstrak Bulan dari Tanggal di PostgreSQL

  3. GROUP atau DISTINCT setelah JOIN mengembalikan duplikat

  4. Bagaimana cara saya melakukan kueri menggunakan bidang di dalam tipe data PostgreSQL JSON yang baru?

  5. Buat tabel dua jenis di PostgreSQL