Secara resmi, PostgreSQL hanya memiliki "fungsi". Fungsi pemicu kadang-kadang disebut sebagai "prosedur pemicu", tetapi penggunaan itu tidak memiliki arti yang berbeda. Secara internal, fungsi kadang-kadang disebut sebagai prosedur, seperti dalam katalog sistem pg_proc
. Itu peninggalan dari PostQUEL. Setiap fitur yang beberapa orang (mungkin dengan pengalaman dalam sistem basis data yang berbeda) mungkin terkait dengan prosedur, seperti relevansinya untuk mencegah injeksi SQL atau penggunaan parameter output, juga berlaku untuk fungsi seperti yang ada di PostgreSQL.
Sekarang, ketika orang-orang di komunitas PostgreSQL berbicara tentang "prosedur tersimpan" atau "prosedur tersimpan nyata", bagaimanapun, mereka sering berarti fitur hipotetis dari objek seperti fungsi yang dapat memulai dan menghentikan transaksi dalam tubuhnya, sesuatu yang fungsi saat ini tidak dapat melakukan. Penggunaan istilah "prosedur tersimpan" dalam konteks ini tampaknya secara analogi dengan produk basis data lainnya. Lihat utas milis ini untuk ide yang tidak jelas.
Namun dalam praktiknya, perbedaan fungsi versus prosedur dalam hal kemampuan mengendalikan transaksi mereka tidak diterima secara universal, dan tentu saja banyak programmer tanpa bias basis data akan mengambil interpretasi mirip Pascal dari prosedur sebagai fungsi tanpa nilai balik. (Standar SQL tampaknya mengambil jalan tengah, dalam bahwa prosedur secara default memiliki perilaku transaksi yang berbeda dari fungsi, tetapi ini dapat disesuaikan per objek.) Jadi dalam hal apa pun, dan terutama ketika melihat pertanyaan di Stack Exchange dengan audiens yang sangat beragam, Anda harus menghindari asumsi terlalu banyak dan menggunakan istilah yang lebih jelas atau mendefinisikan properti yang Anda harapkan.
Membandingkan jawaban yang diterima dari level konseptual abstrak, saya memahami perbedaan dari perspektif fungsionalitas dan input / output. Di bawah ini saya menggunakan sp dan f untuk mewakili masing-masing prosedur dan fungsi yang tersimpan.
Gunakan dalam ekspresi: sp tidak dapat digunakan dalam ekspresi sementara fungsi bisa, yang berarti Anda dapat menggunakan nilai Anda yang dikembalikan dari dalam pernyataan lain, seperti
mengembalikan nilai: sp tidak secara otomatis mengembalikan nilai kecuali jika Anda menentukan refcursor jenis kembali, terbuka dan kembali kursor; f mengembalikan hasil dalam pernyataan terakhir di mana klausa 'kembali' disematkan, seperti klausa pilih .
mengembalikan set hasil tunggal / ganda: di sini set hasil merujuk daftar hasil yang mungkin berbeda dalam format, seperti set integer tunggal, array teks dan dua tabel. sp dapat mengembalikan beberapa set selama Anda menentukan jenis pengembalian kursor, buka dan mengembalikan kursor. Namun, f hanya dapat mengembalikan satu jenis set.
Biasanya, prosedur tersimpan digunakan untuk memodifikasi data atau struktur database di mana nilai kembali tidak diperlukan, seperti menghapus, memperbarui, menjatuhkan , dll; atau situasi di mana beberapa set hasil diperlukan. Fungsi, di sisi lain, sebagian besar dipilih untuk permintaan polos.
Untuk detail lebih lanjut mengenai penjelasan saya, silakan merujuk ke tautan ini: Prosedur dan Fungsi Tersimpan di PostgreSQL
sumber