Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Jenis Kursor SQL Server - Apa Perbedaan Kursor LOKAL DAN GLOBAL | Tutorial SQL Server / Tutorial TSQL

Kusor Lokal:

Cakupan Kursor Lokal terbatas pada kumpulan, prosedur tersimpan, atau pemicu di mana ia dibuat. Setelah Batch, Stored Procedure atau Trigger selesai. Kursor Lokal tidak akan dapat digunakan lagi.

KURSOR GLOBAL:

Cakupan GLOBAL Cursor terbatas pada koneksi di mana kursor itu dibuat. Anda dapat menggunakan GLOBAL CURSOR dalam beberapa batch, Anda dapat membukanya terlebih dahulu dan mengambil datanya dalam hitungan detik. Anda juga dapat membuka GLOBAL CURSOR dalam satu Stored Procedure dan Fetch Data di Next Stored Procedure selama keduanya menggunakan koneksi yang sama.
Jika Anda tidak akan menggunakan kata kunci Local atau Global , Cursor akan dibuat dengan TYPE dengan menggunakan Database Setting seperti gambar di bawah ini.
Gbr 1:Perbedaan Kursor Lokal dan Kursor Global di SQL Server
Mari kita buat contoh tabel dan masukkan beberapa record dan lakukan beberapa pengujian untuk membuktikan definisi kita di atas.

--drop table dbo.Customer
Create table dbo.Customer ( 
CustomerId Int ,
CustomerName VARCHAR(100),
StreetAddress VARCHAr(100),
City VARCHAR(100),
State CHAR(2))
go

--Insert few Records in Sample Table
Insert into dbo.Customer
Select 1,'Aamir shahzad','Test Street Address','Charlotte','NC'
Union all
Select 2,'M Raza','Test Street Address','Charlotte','NC'
union all
Select 3,'John Smith','Test Street Address','New York City','NY'
union All
Select 4,'Christy Richard','Test Street Address','Rio Rancho','NM'




--Test with GLOBAL Cursor in Multiple Batches. 
use Test
go

DECLARE Customer_Cursor CURSOR 
--use LOCAL OR GLOBAL HERE
GLOBAL 
FOR
Select CustomerID,
CustomerName,
StreetAddress,
City,
State
from dbo.Customer
OPEN Customer_Cursor;
GO

--Terminate the Batch and change the Database 
use TestDB
go
FETCH NEXT FROM Customer_Cursor
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT FROM Customer_Cursor 
   END
CLOSE Customer_Cursor;
GO
DEALLOCATE Customer_Cursor;
GO

We will be able to see the records as we have defined Cursor as GLOBAL and it will be 
available during entire Connection , even we have terminated the first Batch by using GO
statement.


Fig 2: Global Cursor in SQL Server
--Test with LOCAL Cursor in Multiple Batches. 
use Test
go

DECLARE Customer_Cursor CURSOR 
--use LOCAL OR GLOBAL HERE
LOCAL 
FOR
Select CustomerID,
CustomerName,
StreetAddress,
City,
State
from dbo.Customer
OPEN Customer_Cursor;
GO

--Terminate the Batch and change the Database 
use TestDB
go
FETCH NEXT FROM Customer_Cursor
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT FROM Customer_Cursor 
   END
CLOSE Customer_Cursor;
GO
DEALLOCATE Customer_Cursor;
GO
 
 
As the scope for LOCAL Cursor is limited to Batch, Stored Procedure or Trigger, The second batch is not able to see the Cursor as we have defined LOCAL Cursor type in our above query
Gbr 3:Kursor Lokal di SQL Server
 

Sekarang mari kita lakukan pengujian dengan Stored Procedure dan lihat cara kerja Local Cursor dan Global Cursor pada Stored Procedure di SQL Server.
--Test with LOCAL Cursor in Multiple Batches. 
use Test
go

Create Procedure Dec_Cursor_Customer AS
BEGIN
DECLARE Customer_Cursor CURSOR 
--use LOCAL OR GLOBAL HERE
GLOBAL 
FOR
Select CustomerID,
CustomerName,
StreetAddress,
City,
State
from dbo.Customer
OPEN Customer_Cursor;
END

GO
Create Procedure Fetch_Cusor_Customer
AS 
BEGIN
FETCH NEXT FROM Customer_Cursor
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT FROM Customer_Cursor 
   END
END

--Execute the Procedures to What we get with GLOBAL and LOCAL Cursor Type

EXEC Dec_Cursor_Customer
GO
EXEC Fetch_Cusor_Customer
CLOSE Customer_Cursor;
GO
DEALLOCATE Customer_Cursor;
GO
 
 
Jika kita menjalankan Stored Procedure di atas, kita akan mendapatkan hasil seperti pada Gambar 2. Karena kita telah mendeklarasikan sebagai tipe GLOBAL, kita akan dapat menggunakannya dalam beberapa Stored Procedure selama Anda menjalankannya di koneksi yang sama.

Lanjutkan dan Ubah Prosedur Tersimpan dan ubah jenisnya dari GLOBAL ke Lokal lalu jalankan prosedurnya. Meskipun kita berada dalam koneksi yang sama, Kita akan mendapatkan kesalahan yang kita dapatkan pada Gambar 3. Karena cakupan Kursor terbatas pada Batch, Stored Procedure atau Trigger setelah Anda mendefinisikan sebagai LOKAL.
Demo Video:Untuk melihat Demo detail cara kerja Kursor Lokal dan Kursor Global, tonton video.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan pemula untuk tabel SQL

  2. Menerapkan Penanganan Kesalahan dan Transaksi di SQL Server

  3. Bagaimana cara mengatur batas waktu skrip SQL Server dari dalam skrip?

  4. Statistik Penggunaan CPU Database SQL Server

  5. sp_executesql lambat dengan parameter