Neler yeni

Welcome to SATBİL FORUM PAYLAŞIM

Join us now to get access to all our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, and so, so much more. It's also quick and totally free, so what are you waiting for?

Bir Satbil Forum Efsanesi

Satbil Reklam Alanı

Satbil Forum Reklam

SQL deyim bloklari,view kullanimi ve stored procedure

mehmet_ozturk

New member
Local time
21:09
Katılım
23 Şubat 2006
Mesajlar
6
Tepkime puanı
16
Puanları
3
Konum
Hatay
[FONT=Verdana, sans-serif]SQL DEYİM BLOKLARI[/FONT]

SQL deyimlerini işletirden bir grup deyimi bir arada işletmek gerekebilir. Bu olanak deyim bloklarıyla yapılır. Diğer bir olanak da IF, CASE ve WHILE gibi hem blok olarak hem de blok olmadan işletilecek deyimleri belli koşullara bağlamaktır.
[FONT=Verdana, sans-serif]A. BEGIN...END[/FONT]

[FONT=Verdana, sans-serif]BEGIN ve END deyimleri bir grup SQL deyimini bir blok içinde toplamayı sağlar. [/FONT]
[FONT=Verdana, sans-serif]Örneğin IF deyimi ile yalnızca bir deyimin işletilip işletilmemesi sınanırken, BEGIN ve END bloğu ile bir grup deyimin çalıştırılıp çalıştırılmaması sağlanır. [/FONT]
[FONT=Verdana, sans-serif]Örnek: [/FONT]
WHILE (SELECT AVG(adet) FROM titles) < 30
-- döngü başlat
BEGIN
UPDATE siparis
SET adet= adet* 2

END



[FONT=Verdana, sans-serif]BEGIN ve END deyimleri genellikle şu durumlarda kullanılır. [/FONT]
  • [FONT=Arial, sans-serif]WHILE ile döngü yapıldığında. [/FONT]
  • [FONT=Arial, sans-serif]Bir CASE fonksiyonunun blok deyimi içermesi durumunda. [/FONT]
  • [FONT=Arial, sans-serif]IF ve ELSE deyiminde. [/FONT]
[FONT=Verdana, sans-serif]B. DENETİM DEYİMLERİ[/FONT]

SQL dilinde programlama dilleri kadar olmasa da program akışını kontrol etmek için deyimler ve yapılar vardır. Bunların başında IF-ELSE, CASE ve WHILE yapısı gelir.

IF...ELSE
Bir deyimin işletilmesini belli bir koşula bağlar.
[FONT=Verdana, sans-serif]Kullanımı: [/FONT]

[FONT=Verdana, sans-serif]IF ifade
{ deyim }
[ ELSE
{ deyim} ] [/FONT]

[FONT=Verdana, sans-serif]Örnek: [/FONT]

[FONT=Verdana, sans-serif]Adet ortalamasının 20'den küçük olması durumunda çalıştırılacak deyimler: [/FONT]



[FONT=Courier New, monospace][FONT=Courier New, monospace]IF (SELECT [/FONT]AVG(adet[FONT=Courier New, monospace]) FROM [/FONT]siparis[FONT=Courier New, monospace]) < 20[/FONT][/FONT]
[FONT=Courier New, monospace][FONT=Courier New, monospace]BEGIN[/FONT][/FONT]

[FONT=Courier New, monospace][FONT=Courier New, monospace]--[/FONT]işlemler[/FONT]
[FONT=Courier New, monospace][FONT=Courier New, monospace]END[/FONT][/FONT]


[FONT=Courier New, monospace][FONT=Courier New, monospace]ELSE[/FONT][/FONT]
[FONT=Courier New, monospace][FONT=Courier New, monospace]BEGIN[/FONT][/FONT]


[FONT=Courier New, monospace][FONT=Courier New, monospace]--[/FONT]işlemler[/FONT]
[FONT=Courier New, monospace][FONT=Courier New, monospace]END[/FONT][/FONT]

CASE
Bir değere göre daha fazla alternatifi yerine getirmeyi sağlar.
Kullanım biçimi:
CASE değer
WHEN değer THEN işlem
WHEN değer THEN işlem
ELSE işlem
END
Tablodan Aktarma:

INSERT INTO yenitablo (alanlar..)
SELECT (alan1, alan2, alan3,
CASE alan4 WHEN 'A' THEN '1' WHEN 'B' THEN '2' ELSE '3' END,
alan5 FROM eskitablo
WHERE isdate (tarih) <> 0
Örnek:
Tablolar arasında aktama:
İNSERT İNTO KAMİL1
(KODU, ADİ, GRUBU, ADRESİ)
SELECT KODU, ADİ,
(CASE GRUBU WHEN 'A' THEN 'EMEKLI' WHEN 'B' THEN 'TERHIS' END)
,ADRESİ FROM KAMİL2
WHILE
SQL deyimlerinin döngü içinde yinelenmesini sağlar. WHILE ile belirtilen döngü koşulu yerine getirildiği sürece deyimler yerine getirilir.
Kullanımı:
WHILE ifade
{ deyim ya da blok}
[ BREAK ]
{ deyim ya da blok}
[ CONTINUE ]

Örnek: Satış adetleri 50 oluncaya kadar adet alanının artır.
WHILE (SELECT AVG(adet) FROM siparis) < 50
BEGIN
UPDATE siparis
SET adet= adet* 2
SELECT MAX(adet) FROM siparis
IF (SELECT MAX(adet) FROM siparis) > 50
BREAK
ELSE
CONTINUE
END
PRINT 'adet değeri büyük'''
BREAK ve CONTINUE kullanmadan:
WHILE (SELECT AVG(adet) FROM siparis) < 50
BEGIN
UPDATE siparis
SET adet= adet* 2
END
PRINT 'adet değeri büyük'''
BREAK ve CONTINUE kullanmadan:
[FONT=Verdana, sans-serif]VIEW NEDİR?[/FONT]
Tablolardaki verilere erişmenin bir diğer yolu da view'ler geliştirmektir. View'ler tabloların belli kolonların listelendiği ayrıca hesaplama işlemlerinin yapıldığı bir veri erişim yöntemidir.
View kullanmanın çok sayıda üsütünlüğü (kolaylığı) vardır. Bunların başında database üzerindeki çok sayıdaki tablo üzerinde özel görünümler yaratması ve kullanıcılara tablolar (görünümün altında yatan) üzerinde izin vermeden tablolar üzerinde işlem yapmalarını sağlar. Örneğin kullanıcı, tablonun sadece belli kolonlarını içeren bir View üzerinde çalışabilir.
NOT: Bu dokümanlar Faruk Çubukçu tarafından hazırlanmıştır. Bütün hakları saklıdır. Ticari olarak kullanılamaz. Bakınız: [FONT=Arial, sans-serif] [/FONT]
Adı geçen ve telif haklı olan ürünler bilgi amaçlı olarak kullanılmıştır.
[FONT=Arial, sans-serif]A. VİEW [/FONT][FONT=Verdana, sans-serif]OLUŞTURMAK[/FONT]

CREATE deyimi ile yaratılır. İçinde genellikle SELECT gibi bir cümle bulunur.
Kullanım Biçimi:
CREATE VIEW view_adı
AS
select_deyimi


Aşağıdaki örnekte bir tablonun belli alanları üzerine bir View yaratılmaktadır.
CREATE VIEW musteri_view AS
SELECT Kodu, Adı, Soyadı, Grubu
FROM musteri

View'ların yaratılmasında SELECT deyimi kullanılır. Ancak bazı kısıtlamaları vardır:

 ORDER BY, COMPUTE, ya da COMPUTE BY sözcükleri kullanılmaz.
 INTO kullanılmaz.

[FONT=Verdana, sans-serif]B. VİEW'LARI ÇALIŞTIRMAK[/FONT]

Bir view'dan veri almak için genellikle SELECT kullanılır.
Aşağıdaki deyim yukarıda hazırladığımız view içindeki verileri görüntüler:
SELECT * from musteri_view
[FONT=Verdana, sans-serif]STORED PROCEDURE[/FONT]
SQL Server'daki Stored procedure'lar aynı diğer programlama dillerindeki procedure'lara benzer. SQL deyimlerini içeren komut doayaları hazırlanır ve sunucu üzerinde saklanır.
Stored procedure aracılığıyla şu işlemler yapılablir:
  • [FONT=Arial, sans-serif]Input parametrelerini kabul ederek ve birçok değerin geri dönmesini sağlar. [/FONT]
  • [FONT=Arial, sans-serif]Database içindeki işlemleri yapmak için programlama deyimleri içerir. [/FONT]
Stored procedure'lar genellikle rutin hale gelmiş işleri kolayca yapmak için geliştirilirler. SQL deyimleriyle yazılan stored procedure'lar sadece ilk kez çalıştırıldıklarında derlenirler. Daha sonraki çalıştırma işlemlerinde derlenmezler ve böylece hızlı bir biçimde çalışma sağlanmış olur.
Örnek bir stored procedure tasarımı:

USE Northwind
GO
CREATE PROC pahali_kitaplar
AS
SELECT *
FROM products
WHERE unitprice > 30
GO

Stored procedure'ı Çalıştırma:

EXEC pahalı_kitaplar


[FONT=Arial, sans-serif]A. CREATE PROCEDURE Deyimi[/FONT]

Bir SQL Server stored procedure'ı CREATE PROCEDURE deyimi ile oluşturulur. İstenirse daha sonra ALTER PROCEDURE deyim ile değiştirilir. Bir stored procedure yaratma deyimi tek bir batch olarak düzenlenir. Diğer bir deyişle diğer SQL deyimleriyle aynı batch içinde yer alamaz.

Kullanım Biçimi:

CREATE PROC[EDURE] procedure_adı[;sayı]
[
{@parameter data_tipi}[VARYING] [= varsayım] [OUTPUT]]
[,...n]
[WITH
{
RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
sql_deyimleri [...n]
Örnekler:
Aşağıdaki stored procedure ile sadece belirtilen yazarın bilgileri ve kitapları listelenir.
USE pubs
GO
CREATE PROCEDURE yazar
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO

Çalıştırılması:
EXECUTE yazar 'White, 'Jhonson'

Ayrıca aşağıdaki biçimde de çalıştırılabilir:

EXECUTE yazar @lastname = 'White', @firstname = 'Johnson'

[FONT=Arial, sans-serif]B. BİR STORED PROCEDURE'I İŞLETMEK[/FONT]

Bir stored procedure'ı işletmek için Transact-SQL EXECUTE deyimi kullanılır. Bunun dışında eğer stored procedure'ın parametresi varsa o da EXECUTE deyimi ile belirtilir.
EXECUTE (T-SQL) Deyimi
Bir stored procedure'ı işletmek için EXECUTE deyimi kullanılır:
Kullanım Biçimi:

[[EXEC[UTE]]
{
{procedure_adı[;sayı] | @procedure_adı_değişkeni
}
[[@parameter =] {değer| @değişken [OUTPUT] | [DEFAULT]]
[,...n]
[WITH RECOMPILE]
Örnekler:

Aşağıdaki örnekte bir komut işletilir:
USE master
EXECUTE xp_cmdshell 'dir *.exe'

Aşağıdaki örnekte ise bir stored procedure parametre ile çağırılarak çalıştırılır:
EXECUTE yazar 'White, 'Jhonson'
Adı geçen ve telif haklı olan ürünler bilgi amaçlı olarak kullanılmıştır.
 
shape1
shape2
shape3
shape4
shape7
shape8
Üst