Lompati ke konten utama
Modul 12 · Pelajaran 1 dari 445/57 dalam kursus~15 min
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:

SQL
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:

SQL
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

Latihan#sql.m12.l1.e1
Upaya: 0Memuat…

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.

Memuat editor…
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

Latihan#sql.m12.l1.e2
Upaya: 0Memuat…

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.

Memuat editor…
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