Saya melihat tautan Info Center Anda ke LUW 9.7, dan Anda menyebutkan bahwa Anda telah memprogram di Jawa, tetapi sebagian besar pengalaman yang saya miliki dengan pengikatan adalah dengan DB2 pada Mainframe dengan COBOL. Jadi, Anda mungkin perlu menyesuaikan sedikit penjelasan (tetapi umumnya, konsepnya harus sama).
Saya percaya bahwa mengikat hanya relevan ketika Anda mengkompilasi program yang menyertakan SQL tertanam yang dikompilasi (SQL terikat secara statis). Jika, misalnya, Anda menggunakan JDBC, Anda tidak diharuskan menjalankan BIND. Pengemudi JDBC akan PREPARE
pernyataan secara dinamis.
Ketika Anda menjalankan program melalui pra-kompiler DB2, PRECOMPILE
menjalankan program Anda, dan jika ia menemukan SQL yang disematkan (dalam COBOL, ini adalah blok pernyataan yang beralih dari EXEC SQL
ke END-EXEC.
), itu dengan hati-hati merobek SQL keluar, dan menggantinya dengan panggilan ke antarmuka COBOL-DB2. Setelah ini, ada dua output dari PRECOMPILE
, sumber COBOL yang telah menghapus semua embedded SQL yang dihapus ( A
mulai sekarang), dan DBRM
yang berisi semua SQL yang telah dihapus (B
).
Precompile memang melakukan beberapa pemeriksaan sintaksis dasar, tetapi perlu diketahui bahwa pemeriksaan hanya didasarkan pada deklarasi tabel Anda dalam program. Itu tidak dilampirkan ke DB2 untuk memverifikasi ini!
Kedua file ini benar-benar terpisah, dan ketika Anda menjalankan program COBOL, ia harus menemukan A
dan B
yang dihasilkan pada waktu yang sama.
Pada titik ini, A
dikompilasi dan dihubungkan dengan kompiler COBOL standar ke dalam load module
dan ditempatkan di pustaka beban untuk digunakan nanti.
Namun, masih banyak pekerjaan yang harus dilakukan B
, DBRM. Di sinilah BIND
masuk BIND
adalah semacam kompiler untuk kode SQL tertanam, dan output dari "kompilasi" adalah a package
.
Untuk mengikat SQL ke dalam "paket" yang dapat dieksekusi, proses BIND melampirkan DB2 dan melakukan beberapa hal:
- Memverifikasi bahwa AuthID saat ini berwenang untuk melakukan bind.
- Periksa sintaks SQL Anda, dengan bantuan dari data dalam katalog DB2.
- Akhirnya, dan yang paling penting, ikatan akan mengoptimalkan SQL Anda
Selama langkah terakhir, semua SQL Anda dijalankan melalui Pengoptimal, yang memperhitungkan semua statistik dan berbagai jalur yang dapat diambil mesin DB2 untuk mengambil data Anda. Kemudian ia memilih jalur yang muncul dengan biaya terendah yang terkait (dengan versi DB2 yang lebih baru [DB2 10 untuk z / OS] , ia mungkin memutuskan untuk mengambil jalur "biaya lebih tinggi", tetapi jalur "risiko lebih rendah"). Setelah path dipilih, ia dikompilasi dan menjadi sebuah paket, yang disimpan dalam katalog (Anda dapat melihat semua paket Anda saat ini dengan SELECT * FROM SYSIBM.SYSPACKAGE
(z / OS)).
Akhirnya, ada bagian terakhir yang memungkinkan program kami untuk menyatukan kembali dengan paket mereka, the PLAN
. Anda membuat rencana dengan melakukan BIND lain ( BIND PLAN
). Paket adalah kumpulan paket yang diizinkan oleh program untuk dicari guna menemukan paket yang memiliki nama yang sama. Dengan COBOL, Anda menentukan paket mana yang harus dicari program di JCL Anda.
Singkatnya, kode yang dikompilasi melewati langkah-langkah ini untuk menghasilkan yang dapat digunakan BIND PLAN
:
Precompile -> Membuat DBRM (dengan C [++], precompiler mengeluarkan SQL yang sudah dikompilasi ke file HFS, yang dapat dikirim melalui program bind command-line ) -> DBRM dioptimalkan dan serangkaian jalur akses ( a package
) dibuat -> Paket ditambahkan ke BIND PLAN
, yang merupakan sekelompok paket yang memungkinkan Anda untuk membuat "jalur pencarian" untuk program Anda untuk melihat.
Karena program-program ini terikat secara statis, jika statistik tabel Anda berubah secara drastis, maka jalur akses yang dipilih pengoptimal pada waktu-mengikat mungkin bukan jalan terbaik lagi, dan mengikat kembali akan memungkinkannya untuk mengevaluasi kembali SQL dan mungkin memilih jalan yang lebih baik.
Sunting (perbarui untuk komentar): Jika Anda menggunakan prosesor baris perintah, Anda dapat mengirimkan paket bind tunggal (.bnd
), atau daftar nama file bind (.lst
). Jika Anda memasukkan daftar, nama file harus didahului dengan@
(misalnya/path/to/@packages.lst
). Di dalam file .lst, Anda dapat meletakkan setiap paket pada satu baris, atau Anda dapat memisahkannya dengan+
:
package1.bnd
package2.bnd
package3.bnd+package4.bnd+package5.bnd