Ini pertanyaan yang menarik, pastinya. Kebanyakan orang yang terbiasa dengan pengembangan Oracle tidak akan memikirkannya tetapi ketika Anda sampai pada itu, kadang-kadang membingungkan untuk mendefinisikan demarkasi antara SQL dan PL / SQL.
Dengan melihat definisi akronim, Anda mulai mendapatkan gagasan tentang bidang fungsi apa yang masing-masing mencakup:
SQL - Bahasa Query Terstruktur
PL / SQL - Bahasa Prosedural / Bahasa Query Terstruktur
Pembaca yang jeli mungkin memperhatikan bagaimana SQL muncul dua kali 8) Itu karena SQL sering tertanam dalam PL / SQL - PL / SQL adalah bahasa yang dibuat untuk menyediakan bahasa generasi ke-4 yang dipatenkan (4GL) yang sangat baik dimainkan dengan objek basis data di Peramal.
Wikipedia memiliki beberapa materi yang cukup bagus tentang SQL dan PL / SQL
Bagian yang membingungkan adalah di mana PL / SQL dan SQL tumpang tindih sedikit. Ruang lingkup SQL mencakup penyisipan data, kueri, pembaruan, dan penghapusan, yang disebut DML, atau operasi bahasa manipulasi data, tetapi juga mencakup pembuatan, ubah, ganti nama, jatuhkan yang merupakan operasi bahasa definisi data DDL atau definisi data. Di sini di mana beberapa mungkin bingung. Operasi untuk membuat prosedur tersimpan, sesuatu yang ditulis menggunakan PL / SQL, sebenarnya SQL - Anda menggunakan SQL untuk membuat objek database yang mewakili blok PL / SQL.
Demikian juga, Anda dapat menanamkan kode SQL di dalam PL / SQL Anda. Sebagai contoh, loop FOR di PL / SQL dapat didasarkan pada query SQL. Hancurkan pikiranmu sedikit, eh? Anda membuat prosedur menggunakan SQL yang sebenarnya secara internal menggunakan SQL untuk melakukan beberapa tindakan pada catatan dari database.
Hal-hal keren jika Anda bertanya kepada saya.
v$sql
dll.Jika dibungkus
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Maka itu adalah PL / SQL. Apa artinya ini di bawah tenda? SQL akan "dikompilasi" ke rencana kueri dan dieksekusi, segera mengembalikan hasil yang ditetapkan jika
SELECT
atau jumlah baris yang terpengaruh dalam kasus lain, atau kesalahan. Namun PL / SQL lebih terlibat. Setiap objek yang direferensikan di dalamnya diperiksa keberadaannya dan hibah yang diperlukan, kemudian PL / SQL dikompilasi ke kode yang hampir asli , yang dijalankan dengan kecepatan penuh. Ketergantungan dilacak dan jika tabel berubah, maka setiap PL / SQL referensi yang membutuhkan kompilasi ulang. Alasannya adalah kecepatan; karena semuanya dilakukan di muka pada waktu kompilasi, tidak perlu ada pemeriksaan runtime dalam PL / SQL, sedangkan pernyataan SQL harus diperiksa setiap kali (bahkan rencana kueri di-cache, yang disebut soft parse, hak istimewa masih harus diperiksa, dan bahkan parse lunak memiliki biaya yang terkait dengannya).Ini adalah salah satu "keunggulan mematikan" dari prosedur tersimpan seperti yang dilakukan Oracle; sebenarnya mengeksekusi PL / SQL tersimpan proc atau memicu melakukan jumlah minimum absolut perhitungan untuk mendapatkan hasilnya. Kode aplikasi yang berjalan di luar kernel Oracle di mana tidak dipercaya harus melewati lebih banyak rintangan untuk mendapatkan data. Ini argumen yang sama untuk bahasa tingkat tinggi yang diketik dengan kuat, referensial transparan seperti OCaml atau Haskell - melakukan lebih banyak pekerjaan sekali, pada waktu kompilasi, dan menuai manfaat pada jutaan waktu kode dieksekusi.
sumber
SQL adalah standar *.
PL / SQL adalah ekstensi vendor ke standar SQL *.
* SQL adalah bahasa yang memiliki tata bahasa eksplisit dan aturan untuk bagaimana tata bahasa itu harus diimplementasikan, dan
bukanmerupakan standarper-se.Namun,karena ada spesifikasi bahasa, yang dapat disepakati semua orang, maka segala sesuatu yang ditulis dalam SQL akan portabel jika program hanya ditulis dalam SQL.Tetapi karena PL / SQL adalah ekstensi vendor, itu akan memiliki bagian bahasa yang mungkin tidak didukung oleh vendor lain.
sumber