Akhwat

Akhwat
be a good muslim

Minggu, 23 Januari 2011

Kursor Eksplisit dan IMplisit

PL / SQL kursor ke catatan beberapa query menggunakan



Pertama, apa yang kursor

Oracle menggunakan dua kursor: kursor kursor eksplisit dan implisit.Tidak peduli berapa banyak catatan untuk kembali pernyataan, PL / SQL untuk penggunaan setiap SQL UPDATE, DELETE, dan INSERT perintah seperti pernyataan kursor implisit.(Laporan SQL untuk mengelola proses, harus definisi implisit dari kursor.) User dan menggunakan pernyataan kursor menangani pengembalian statemen SELECT multipel rekaman.Definisi kursor menampilkan struktur, yang memungkinkan pengguna untuk menentukan laporan area memori tertentu untuk digunakan nanti.

Kedua, peran kursor

Ketika PL / SQL kursor saat query kembali beberapa baris, yang dikenal sebagai kegiatan kelompok ini rekaman ditetapkan.Oracle set kegiatan Anda membuat tampilan disimpan dalam definisi kursor bernama.kursor Oracle adalah menangani mekanisme mudah untuk data multi-line, tidak ada kursor, pengembang Oracle harus individual, eksplisit dan mengelola query kursor untuk mengambil setiap record yang dipilih.

Fungsi lain dari hal kursor, itu termasuk track record pointer akses saat ini, yang membuat program anda dapat menangani lebih dari satu record.

Ketiga, metode dasar menggunakan kursor

Sebagai berikut:

1, deklarasi kursor

Sintaks deklarasi kursor adalah sebagai berikut:

MENYATAKAN cursor_name

Apakah

Pernyataan SELECT

Yang, cursor_name yang Anda tentukan nama kursor; statemen SELECT dikembalikan ke query rekor kursor aktif.

deklarasi Cursor menyelesaikan dua tujuan berikut:

Untuk nama kursor;

Akan mengaitkan pertanyaan dengan kursor.

Perlu dicatat bahwa harus PL / SQL blok deklarasi kursor bagian dari pernyataan itu, untuk menentukan nama kursor adalah undeclared identifier, bukan PL / SQL nama variabel tidak dapat ditugaskan untuk kursor, juga tidak dapat digunakan dalamekspresi.PL / SQL block untuk menggunakan nama ini untuk referensi query kursor.

Contoh: MENYATAKAN

CURSOR c1

Apakah

SELECT VIEW_NAME DARI ALL_VIEWS

MANA rownum 10 =;

Anda juga dapat mendeklarasikan pernyataan kursor mendefinisikan parameter kursor, misalnya:

CURSOR c1 (melihat nomor _nbr)

Apakah

SELECT VIEW_NAME DARI ALL_VIEWS

WHERE rownum = view _nbr;

parameter Cursor hanya kursor sesuai yang terlihat, tidak bisa referensi kursor di luar parameter kursor.Jika Anda mencoba untuk melakukannya, Oracle akan mengembalikan kesalahan yang variabel tidak didefinisikan.

2, buka kursor

Buka kursor sintaks berikut:

TERBUKA cursor_name;

Cursor_name mana kursor adalah nama yang Anda ditetapkan sebelumnya.

Buka kursor akan mengaktifkan permintaan dan mengidentifikasi set aktif, tapi sebelum perintah dalam pelaksanaan kursor kembali dan tidak benar-benar mengambil catatan.TERBUKA perintah juga menginisialisasi pointer kursor ke titik ke set aktif dari record pertama.Kursor dibuka sampai dengan ditutupnya sebelum acara diatur untuk mengambil kembali semua data yang statis, dengan kata lain, mengabaikan semua kursor kursor terbuka setelah eksekusi dari perintah SQL DML data (INSERT, UPDATE, DELETE, dan SELECT).Oleh karena itu, buka hanya jika diperlukan, untuk me-refresh set aktif, cukup menutup dan membuka kembali kursor dapat.

3, untuk mengambil data dari kursor

perintah FETCH untuk mengambil setiap kali catatan cara kegiatan terkonsentrasi dalam catatan.perintah FETCH, dan biasanya beberapa jenis pengolahan iteratif digunakan dalam kombinasi, dalam pengolahan berulang, pelaksanaan perintah FETCH setiap waktu, pindahkan kursor ke set aktif dari record berikutnya.

FETCH perintah sintaks:

FETCH cursor_name KE record_list;

Yang, cursor_name adalah nama dari kursor yang didefinisikan di atas; record_list adalah daftar variabel, yang mengambil kegiatan terkonsentrasi pada kolom.perintah FETCH untuk menempatkan hasil set aktif variabel-variabel ini.

FETCH perintah pelaksanaan, kegiatan difokuskan pada hasil dibawa kembali ke PL / SQL variabel, sehingga PL / SQL blok.Setiap record diambil, kursor bergerak pointer ke acara berikutnya rekor.

Contoh:

FETCH C1 KE VNAME;

SAAT C1% DITEMUKAN LOOP

DBMS_OUTPUT.PUT_LINE (TO_CHAR (C1 ROWCOUNT%) | |''| | VNAME);

END LOOP;

Di antara mereka, penggunaan 'DITEMUKAN%' properti sehingga ketika set aktif mencapai akhir FETCH, tidak akan memunculkan eksepsi.atribut lainnya dan makna sebagai berikut:

Atribut konten

% DITEMUKAN Boolean properti, apabila hasil sukses terbaru dari catatan, nilai adalah TRUE

% NOTFOUND Boolean properti yang nilai dari nilai total properti dengan% berlawanan DITEMUKAN

% ISOPEN Boolean atribut, saat TRUE dikembalikan ketika kursor terbuka

% Numerik ROWCOUNT atribut, kembali dari kursor ke jumlah record dibaca

Atribut konten

% DITEMUKAN Boolean properti, apabila hasil sukses terbaru dari catatan, nilai adalah TRUE

% NOTFOUND Boolean properti yang nilai dari nilai total properti dengan% berlawanan DITEMUKAN

% ISOPEN Boolean atribut, saat TRUE dikembalikan ketika kursor terbuka

% Numerik ROWCOUNT atribut, kembali dari kursor ke jumlah record dibaca

4, tutup kursor

CLOSE pernyataan kursor menutup sebelum terbuka, membuat rangkaian peristiwa yang tidak pasti.Ketika pengguna program atau akhir sesi, Oracle implisit dekat kursor.Kursor tertutup, Anda tidak dapat melakukan apapun untuk itu, jika tidak terkecuali dilemparkan.

CLOSE sintaks pernyataan adalah:

cursor_name CLOSE;

Yang, cursor_name adalah nama dari kursor yang sebelumnya terbuka.

kode lengkap adalah sebagai berikut:

MENYATAKAN

CURSOR C1 IS VIEW_NAME SELECT DARI ALL_VIEWS

MANA rownum 10 =

ORDER BY VIEW_NAME;

VNAME VARCHAR2 (40);

BEGIN

OPEN C1;

FETCH C1 KE VNAME;

SAAT C1% DITEMUKAN LOOP

DBMS_OUTPUT.PUT_LINE (TO_CHAR (C1% ROWCOUNT )||''|| VNAME);

END LOOP;

END;

... ... CLOSE C1;

IV Ringkasan

Kursor adalah struktur dapat menangani catatan waktu query multi-line. Untuk setiap pernyataan DML menciptakan kursor implisit, sedangkan kursor secara eksplisit yang dibuat oleh user untuk proses pengembalian query multipel rekaman.Selain itu, dengan menghilangkan analisis ulang kode, kode kursor untuk meningkatkan kecepatan pemrosesan.

1 komentar: