Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan DRDA mendukung eksekusi pernyataan SQL dinamis dan statis. Server DRDA akan memproses pernyataan SQL dinamis, misalnya perintah DRDA EXCSQLIMM (Execute Immediate SQL Statement) dan EXCSQLSTT (Execute SQL Statement), dengan mengonversi serangkaian dasar sintaks ANSI SQL 92 Entry-Level DB2 ke sintaks T-SQL Microsoft SQL Server. Layanan DRDA akan memproses pernyataan SQL statis dalam dua langkah: (1) waktu pengikatan dan (2) run-time.
Pada saat waktu pengikatan, Layanan DRDA akan memproses BGNBND (Memulai Pengekatan Paket ke RDB) dan BNDSQLSTT (Mengikat Pernyataan SQL ke Paket RDB) menjadi prosedur tersimpan T-SQL di SQL Server. Secara opsional, Layanan DRDA dapat memproses pengikatan ke dalam SQL statis Microsoft untuk file XML DB2 atau dapat memproses pengikatan dengan memanggil pendengar ikatan kustom yang dapat diganti (misalnya pengikat paket kustom atau pihak ketiga yang dapat mendukung serangkaian konversi sintaks SQL yang lebih luas). Untuk informasi selengkapnya tentang format XML paket yang didukung oleh Klien DRDA Microsoft dan Layanan DRDA, lihat topik berjudul Static SQL untuk DB2.
Pada run-time, Layanan DRDA akan memproses perintah PRPSQLSTT (Siapkan Pernyataan SQL), EXCSQLSTT (Jalankan Pernyataan SQL), dan OPNQRY (Open Query) menjadi pernyataan PANGGILAN T-SQL. Untuk mendukung operasi kursor server, Layanan DRDA akan memproses OPNQRY menjadi perintah membuka kursor, CNTQRY (Lanjutkan Kueri) ke dalam perintah ambil data, dan CLSQRY (Tutup Kueri) menjadi perintah menutup kursor. Layanan DRDA akan memproses perintah penerapan, pembatalan, dan sinkronisasi log sebagai bagian dari dukungannya untuk DRDA DUW (Unit Kerja Terdistribusi).
Konvensi Penamaan Paket
DRDA mendefinisikan paket SQL statis yang sepenuhnya memenuhi syarat menggunakan PKGNAM (Nama Paket RDB) yang terdiri dari beberapa bagian ini.
RDBNAM (Nama Database Relasional)
RDBCOLID (Pengidentifikasi Koleksi RDB)
PKGID (Pengidentifikasi Paket RDB)
RDBNAME.RDBCOLID.PKGID.PKGCNSTKN.PKGSN
Contoh sebelumnya menunjukkan nama paket yang sepenuhnya memenuhi syarat dengan token konsistensi.
Peringatan
Jika lebih dari satu paket memiliki nilai yang sama untuk PKGNAM, maka paket dibedakan oleh VRSNAM (Nama Versi) atau PKGCNSTKN (token konsistensi nama paket).
PKGCNSTKN (Token Konsistensi Paket RDB)
VRSNAM (Nama Versi)
Mengonversi paket ke prosedur tersimpan
Layanan DRDA mengonversi SQL statis untuk paket DB2 dan pernyataan SQL yang disematkan menjadi prosedur tersimpan SQL Server, dengan memproses alur protokol DRDA BGNBND (Begin Bind) dan BNDSQLSTT (Pernyataan SQL Bind) dan nilai data yang diformat. Secara opsional, Layanan DRDA dapat memproses pengikatan sebagai file XML, untuk konversi nanti menjadi prosedur tersimpan atau tujuan pemecahan masalah. Selanjutnya, Layanan DRDA dapat memanggil komponen pendengar ikat kustom untuk memproses alur BGNBND dan BNDSQLSTT. Lihat buku Operasi untuk informasi selengkapnya tentang pemrosesan alur pengikatan paket. Lihat Panduan Programmer dan Referensi Programmer untuk informasi tentang pendengar pengikatan kustom.
Dalam ilustrasi sebelumnya, DB2 untuk z/OS embedded SQL dikonversi ke paket DB2 selama fase pra-kompilasi DB2, dan kemudian dikonversi ke alur aliran DRDA BGNBND dan BNDSQLSTT selama fase pengikatan penyalinan DB2, dan kemudian dikonversi ke prosedur tersimpan SQL Server oleh Servis DRDA saat memproses alur paket pengikatan dan pernyataan DRDA.
Pernyataan Paket SQL Statis
IBM DB2 untuk z/OS dan dokumentasinya mencakup serangkaian program contoh pengujian verifikasi penginstalan, termasuk COBOL untuk z/OS
EXEC SQL CONNECT TO :TEMPLOC END-EXEC
EXEC SQL INSERT INTO VHDEPT
VALUES (:DEPT-NUMB, :DEPT-NAME, :DEPT-MGR,
:DEPT-ADMR, :DEPT-LOC)
END-EXEC.
Contoh sebelumnya menunjukkan program COBOL sampel untuk IBM DB2 di z/OS dengan pernyataan SQL CONNECT dan INSERT yang disematkan.
CONNECT TO :H
INSERT INTO VHDEPT VALUES (:H, :H, :H, :H, :H )
Contoh sebelumnya menunjukkan contoh program COBOL IBM DB2 untuk z/OS dengan pernyataan SQL yang diintegrasikan dan diekstrak oleh pracompiler DB2, kemudian disimpan dalam paket SQL statis DB2—satu bagian untuk setiap pernyataan.
<Section Number="18" Alias="">
<Statement Number="18">INSERT INTO VHDEPT VALUES ( :H , :H , :H , :H , :H ) </Statement>
<Parameters>
<Parameter Name="DEPT-NUMB" Type="Char" Length="3" Precision="0" Scale="0" CCSID="37" Nullable="False" />
<Parameter Name="DEPT-NAME" Type="Char" Length="36" Precision="0" Scale="0" CCSID="37" Nullable="False" />
<Parameter Name="DEPT-MGR" Type="Char" Length="6" Precision="0" Scale="0" CCSID="37" Nullable="False" />
<Parameter Name="DEPT-ADMR" Type="Char" Length="3" Precision="0" Scale="0" CCSID="37" Nullable="False" />
<Parameter Name="DEPT-LOC" Type="Char" Length="16" Precision="0" Scale="0" CCSID="37" Nullable="False" />
</Parameters>
</Section>
Contoh sebelumnya menunjukkan IBM DB2 untuk sampel z/OS program COBOL statis SQL untuk pernyataan paket DB2 yang dikonversi oleh Layanan DRDA menjadi SQL statis untuk bagian file XML DB2. DB2 untuk z/OS tidak menyertakan pernyataan CONNECT dalam paket jarak jauh yang ditentukan DRDA.
/****** BNDOPT: <Options><BNDCHKEXS>BNDEXSOPT</BNDCHKEXS><BNDCRTCTL>BNDNERALW</BNDCRTCTL><BNDEXPOPT>EXPNON</BNDEXPOPT><DFTRDBCOL>CXE001</DFTRDBCOL><DGRIOPRL>1</DGRIOPRL><PKGATHOPT>PKGATHKP</PKGATHOPT><PKGISOLVL>ISOLVLCS</PKGISOLVL><PKGOWNID>CXE001</PKGOWNID><PKGRPLOPT>PKGRPLALW</PKGRPLOPT><QRYBLKCTL>FIXROWPRC</QRYBLKCTL><RDBRLSOPT>RDBRLSCMM</RDBRLSOPT><STTDATFMT>USADATFMT</STTDATFMT><STTDECDEL>DECDELPRD</STTDECDEL><STTSTRDEL>STRDELAP</STTSTRDEL><STTTIMFMT>USATIMFMT</STTTIMFMT></Options> ******/
CREATE PROCEDURE [DSN8910].[DSN8HC3_18BBB2BA1492DAC8_19] @DEPT_NUMB Char(3), @DEPT_NAME Char(36), @DEPT_MGR Char(6), @DEPT_ADMR Char(3), @DEPT_LOC Char(16)
AS
begin
INSERT INTO VHDEPT VALUES ( @DEPT_NUMB , @DEPT_NAME , @DEPT_MGR , @DEPT_ADMR , @DEPT_LOC )
return @@ROWCOUNT
end
GO
Contoh sebelumnya menunjukkan IBM DB2 untuk sampel z/OS program COBOL statis SQL untuk pernyataan paket DB2 yang dikonversi oleh Layanan DRDA menjadi pernyataan SQL Server CREATE PROCEDURE.
Opsi Pengikatan Paket Layanan DRDA
Alur DRDA BGNBND (Begin Bind) mencakup serangkaian opsi pengikatan paket yang dapat memengaruhi penyimpanan dan eksekusi paket runtime. Layanan DRDA memetakan sejumlah opsi pengikatan terbatas ke konstruksi SQL Server. Layanan DRDA mempertahankan opsi ikatan pada SQL statis dalam file XML paket DB2, sebagai komentar di dalam prosedur tersimpan, dan secara opsional sebagai properti tambahan pada prosedur tersimpan.
Kontrol Pembuatan Paket Ikat
Layanan DRDA mendukung DRDA BGNBND BNDCRTCTL (Bind Package Creation Control), yang menginstruksikan MsDrdaService untuk melewati kesalahan pengikatan. Titik kode BNDCRTCTL mendukung enumerasi nilai.
BNDCHKONL(Pemeriksaan Pengikatan Saja)
BNDNERALW (Tidak Boleh Ada Kesalahan Saat Mengikat)
BNDERRALW (Kesalahan Pengikatan Diizinkan)
BNDNERALW (Ikatan Tanpa Kesalahan Diizinkan)
Secara default, Layanan DRDA secara otomatis mengatur ke BNDNERALW (Bind No Errors Allowed). Layanan DRDA mengembalikan BGNBNDRM (Pesan Balasan BGNBND) dengan kesalahan yang menunjukkan masalah, ketika salah satu kejadian berikut terjadi.
Masalah konversi DRDA-ke-XML
Masalah konversi XML-ke-DDL
Pendengar ikatan kustom mengembalikan DDL pada antarmuka panggilan balik
Layanan DRDA tidak dapat menjalankan pernyataan DDL
Untuk menginstruksikan Layanan DRDA untuk mengabaikan kesalahan dan melanjutkan pemrosesan paket, klien AR DRDA harus menentukan opsi BNDCRTCTL BNDERRALW (Kesalahan Ikatan Diizinkan).
Saat menggunakan alat Administratif DB2 dengan DB2 untuk z/OS, administrator DB2 dapat menentukan opsi SQLERROR "C" (Lanjutkan). Saat menggunakan alat salinan ikat DB2 dengan DB2 untuk z/OS, pemrogram DB2 dapat menavigasi ke panel PAKET BIND DB2, menentukan CHANGE CURRENT DEFAULTS=YES, lalu mengatur SQLERROR PROCESSING=C.
Ganti Paket Pengikatan
Layanan DRDA mendukung DRDA BGNBND PKGRPLOPT (Opsi Penggantian Paket), yang menginstruksikan MsDrdaService untuk menghapus dan membuat kembali prosedur tersimpan paket. Titik kode PKGRPLOPT mendukung nilai Boolean.
Saat ini, kami menambahkan tetapi tidak mengganti paket, saat memproses BGNBND (Begin Bind) BNDSQLSTT (Pernyataan Bind SQL). Opsi ini menginstruksikan DB2 untuk z/OS untuk menghilangkan dan membuat salinan baru paket.
PKGRPLALW (Penggantian Paket Diizinkan)
PKGRPLNA (Penggantian Paket Tidak Diizinkan)
Secara default, Layanan DRDA berfungsi pada PKGRPLALW (Penggantian Paket Diizinkan). Layanan DRDA menjalankan pernyataan DROP PROCEDURE sebelum menjalankan pernyataan CREATE PROCEDURE.
Daftar Opsi Pengikatan
Berikut ini adalah daftar opsi pengikatan paket yang ditentukan dalam file XML paket SQL statis untuk DB2. Format elemen, jenis, dan nilai ini berbeda dari versi Server Integrasi Host ke yang lain. Dalam HIS 2010 (V8.5), teknologi ini mendukung format versi 8.5 dari opsi pengikatan ini. Dalam HIS 2013 (V9.0), teknologi ini mendukung format versi 9.0 dari opsi pengikatan ini, yang lebih verbose dan deskriptif. Teknologi HIS 2013 mencakup file skema XSD untuk digunakan dengan file XML paket SQL statis untuk DB2
Layanan DRDA Kursor SQL Statis
Layanan DRDA mengubah SQL statis untuk paket DB2 menjadi prosedur tersimpan SQL Server, saat memproses DRDA mulai mengikat dan mengikat perintah pernyataan SQL, termasuk pernyataan SQL DECLARE CURSOR yang disematkan. Bergantung pada jenis kursor, Layanan DRDA menentukan prosedur tersimpan untuk menyertakan parameter input tambahan ("INVOKE_TYPE") untuk menentukan tindakan pada kursor (misalnya buka, ambil, tutup). Layanan DRDA menyertakan komentar dalam prosedur tersimpan SQL Server untuk menunjukkan opsi pengikatan (misalnya protokol baris tetap) dan jenis kursor (misalnya global, untuk pembaruan, baca saja).
Mendeklarasikan dan Membuka Kursor
Layanan DRDA membuka kursor dengan memanggil prosedur tersimpan di SQL Server menggunakan argumen parameter tipe pemanggilan "@_INVOKE_TYPE\_ = 0", sebagai tanggapan terhadap perintah DRDA AR OPNQRY (Open Query) untuk mendukung perintah DECLARE CURSOR dan OPEN CURSOR dari program konsumen, dan mengembalikan satu baris ke DRDA AR sebagai balasan untuk perintah DRDA OPNQRY yang disebut QRYDTA (Query Answer Data Set).
Mengambil data dari Kursor
Layanan DRDA mengambil data dari kursor dengan memanggil prosedur tersimpan SQL Server dengan parameter tipe pemanggilan "@_INVOKE_TYPE\_ = 1" dan parameter @_FETCH_ROW_COUNT\_ = n", sebagai tanggapan atas DRDA AR CNTQRY (Lanjutkan Kueri) untuk mendukung perintah FETCH program konsumen, mengembalikan satu baris atau beberapa (n) baris ke DRDA AR dalam jawaban terhadap perintah DRDA CNTQRY yang disebut QRYDTA (Set Data Jawaban Kueri).
Untuk meningkatkan kinerja, Layanan DRDA mengirimkan beberapa baris per pengambilan jika memungkinkan, kecuali jika paket atau kursor ditentukan untuk pengambilan baris tunggal guna mendukung pembaruan bersamaan. Lihat deskripsi sintaks klausa SQL dan opsi ikat di bawah ini.
Tutup Kursor
Layanan DRDA mengakhiri kursor dengan memanggil prosedur tersimpan SQL Server dengan argumen parameter jenis panggilan "@_INVOKE_TYPE\_ = 2", sebagai respons terhadap DRDA AR CLSQRY (Close Query) untuk mendukung perintah CLOSE CURSOR dari program konsumen, membalas DRDA AR dengan ENDQRYRM (Pesan Balasan Akhir Query) terhadap perintah DRDA CLSQRY.
Jika pernyataan DECLARE CURSOR menyertakan klausa SQL dengan HOLD, maka Layanan DRDA menetapkan prosedur tersimpan dengan opsi DECLARE CURSOR GLOBAL. Dalam hal ini, SQL Server akan mempertahankan kursor selama permintaan penutupan dan komit pada durasi koneksi DRDA AR ke Layanan DRDA ke SQL Server.
Sintaks Klausul SQL
Layanan DRDA akan menyertakan komentar RETURN_RESULTSET dalam prosedur tersimpan ketika pernyataan DECLARE CURSOR SQL menyertakan klausul SQL DECLARE CURSOR FOR SELECT.
Layanan DRDA akan menyertakan komentar CURSOR_WITH_HOLD dalam prosedur tersimpan ketika pernyataan DECLARE CURSOR SQL menyertakan klausul SQL WITH HOLD. Layanan DRDA menentukan prosedur tersimpan dengan opsi DECLARE CURSOR GLOBAL, dan SQL Server akan mempertahankan kursor dari dekat dan menerapkan permintaan selama durasi DRDA AR ke Layanan DRDA ke koneksi SQL Server.
Layanan DRDA akan menyertakan komentar CURSOR_FOR_UPDATE dalam prosedur tersimpan ketika pernyataan DECLARE CURSOR SQL menyertakan klausa SQL FOR UPDATE. Layanan DRDA mendefinisikan prosedur simpan tanpa argumen parameter @_FETCH_ROW_COUNT\_ = n". Layanan DRDA hanya akan mengembalikan satu baris per pengambilan.
Bergantung pada opsi pengikatan, Layanan DRDA menginterpretasikan sintaks klausul SQL UNTUK MEMBACA SAJA dan UNTUK MENGAMBIL SAJA sebagai penanda kursor yang tidak dapat diperbarui, di mana Layanan DRDA dapat mengambil beberapa baris per CNTQRY. Layanan DRDA menentukan prosedur tersimpan dengan argumen parameter @_FETCH_ROW_COUNT\_ = n". Layanan DRDA akan mengembalikan satu baris atau beberapa baris per pengambilan data berdasarkan opsi ikatan.
DECLARE C2 CURSOR WITH HOLD FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1 FOR READ ONLY
DECLARE C4 CURSOR WITH HOLD FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1 FOR FETCH ONLY DECLARE C8 CURSOR WITH HOLD FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1
Contoh pernyataan SELECT yang ditentukan menggunakan LMTBLKPRC yang menyertakan parameter pengambilan jumlah baris.
Opsi Pengikatan Paket
Layanan DRDA menafsirkan opsi DRDA BGNBND (Begin Bind) QRYBLKCTL (Kontrol Protokol Blok Kueri) sebagai pengganti untuk jenis kursor dan sintaks klausa SQL, yang menginstruksikan Layanan DRDA untuk mengembalikan satu baris setiap pengambilan atau beberapa baris setiap pengambilan untuk kursor yang tidak dapat diperbarui.
QRYBLKCTL default adalah LMTBLKPRC (Protokol Kueri Blok Terbatas), yang menginstruksikan Layanan DRDA untuk mengembalikan beberapa baris per blok kueri, sebanyak yang muat rata-rata ke dalam blok 32K, dikurangi byte yang diperlukan untuk DRDA DSS (Struktur Aliran Data) guna menentukan jenis data kolom.
Secara opsional, programmer DB2 dapat membuat ikatan dengan paket menggunakan opsi pengikatan DB2 CURRENTDATA=YES, yang diterjemahkan menjadi opsi DRDA BGNBND (Begin Bind) QRYBLKCTL (Kontrol Protokol Blok Kueri) FIXROWPRC (Protokol Kueri Baris Tetap), untuk menginstruksikan Layanan DRDA mengembalikan satu baris tetap per CNTQRY (Lanjutkan Kueri) sebagai respons terhadap pernyataan FETCH SQL program.
Tidak Diperlukan Kursor
Jika opsi ikatan adalah LMTBLKPRC default, Server Data tersebut menentukan prosedur tersimpan dengan pernyataan SELECT tetapi tanpa DECLARE CURSOR, ketika pernyataan tersebut tidak ambigu sebagai baca-saja. Lihat deskripsi sintaks klausa SQL dan opsi ikat di bawah ini.
DECLARE C1 CURSOR FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1 FOR READ ONLY
DECLARE C3 CURSOR FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1 FOR FETCH ONLY
DECLARE C7 CURSOR FOR SELECT SALESKEY FROM CONTOSO.DSN8910.BULKTST1
Contoh pernyataan SELECT yang tidak memerlukan kursor SQL Server.