Pelajaran modul (1/4)
UDF dan SQL dasar
Sejauh ini kami telah mengirimkan query dari server Node.js. Namun jika rumus digunakan dalam lusinan kueri berbeda (misalnya menghitung harga akhir termasuk PPN), mengapa harus menduplikasi perhitungan tersebut dalam JavaScript? Fungsi SQL (Fungsi Buatan Pengguna - UDF) mari kita membuat "makro" di dalam DB itu sendiri.
Berikut cara membuat makro SQL matematika:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;Setelah perintah ini dijalankan, fungsinya akan tetap ada di database kami selamanya. Itu bisa dipanggil dari permintaan apa pun:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;Penciptaan yang dinamis
Kita dapat mendefinisikan variabel sebanyak yang kita inginkan, menentukan tipenya, dan LANGUAGE sql akan menjalankan kueri dan secara implisit mengembalikan pernyataan terakhir yang ditempatkan di antara tanda dolar $$.
Cobalah sendiri
Buat fungsi callable sederhana bernama 'get_full_name' yang menerima dua parameter TEXT ('first_name' TEXT, 'last_name' TEXT).\nIni harus mengembalikan nilai TEXT.\nDi dalam, lakukan SELECT sepele yang menggabungkan dua argumen dengan satu spasi di antara keduanya, dan mendeklarasikannya sebagai bahasa sql.
Tunjukkan petunjuk
BUAT ATAU GANTI FUNGSI get_full_name(first_name TEXT, last_name TEXT) MENGEMBALIKAN TEKS SEBAGAI $$ SELECT first_name || ' ' || nama_belakang; $$ BAHASA sql;
Solusi tersedia setelah 3 upaya
Di UDF yang lebih canggih, kami dapat menyematkan seluruh kueri. Buat fungsi 'get_customer_count()' yang tidak menerima parameter dan MENGEMBALIKAN INTEGER.\nDi dalamnya, jalankan 'SELECT COUNT(id) FROM pelanggan' yang sepele.\nDeklarasikan sebagai bahasa sql murni.
Tunjukkan petunjuk
Hati-hati: COUNT mengembalikan bigint, masukkan ke INTEGER untuk mencocokkan jenis pengembalian! BUAT ATAU GANTI FUNGSI get_customer_count() MENGEMBALIKAN INTEGER SEBAGAI $$ SELECT CAST(COUNT(id) AS INTEGER) DARI pelanggan; $$ BAHASA sql;
Solusi tersedia setelah 3 upaya