Depolanmış Prosedürler etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Depolanmış Prosedürler etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2 Kasım 2014 Pazar

SQL'de Türkçe Karakter Sorunu Nasıl Çözülür?

Eğer bir database tanımlaması düzgün yapılandırılmadıysa yeni oluşturduğunuz veya taşıdığınız veritabanındaki içeriklerde bulunan türkçe karakterler bozulabilir. Bunun nedeni veritabanını oluştururken seçmemiş olduğunuz veya default kalan "collation" ayarıdır. Eğer default değeriniz türkçe değilse tanımlama bozuk olacaktır. 

Bu sorunu düzeltmek için ne yapabiliriz?

Yeni bir veritabanı oluştururken ya da veritabanı taşırken yeni ekranında sol tarafta bulunan "Options" sekmesinde açılan "collation" öğesini "TURKISH_CI_AS" olarak seçmelisiniz.


"collation" değerini "TURKISH_CI_AS" olarak değiştirirseniz tanımlama anlamında herhangi bir karakter sorunu yaşanmayacaktır.

Varolan bir veritabanının tanımlama dilini kontrol etmek isterseniz. Object Explorer üzerinde kontrol etmek istediğiniz veritabanına sağ tıklayın. "Properties" seçin. Açılan "General" sekmesinde sağ tarafta altta Maintenance başlığında "Collation" kısmı bulunmaktadır. 

25 Ekim 2014 Cumartesi

SQL'de VIEW Oluşturma ve Kullanımı

Temel amacı tabloların içerisinden veri kümesi getirip ortaya çıkan sonucu sanal tabloymuş gibi yeniden sorgulayabilmemizi sağlamaktır. Kısaca SQL'de verilerimizin isteğe bağlı alanlara ve tablolara göre ekranımızda görünteleme işlemi yapmamızı sağlar. Kullanıcının istediği verilere göre gösterim yapmak veya raporlamak SQL VIEW sayesinde kolaylıkla halledilmektedir.

Veritabanı VIEW ile oluşan datayı saklamaz. Bir VIEW geçen SQL deyimi her çalıştırıldığında ilgili VIEW sanal tabloyu yeniden oluşturur. VIEW üzerinde yapılan değişikler kendilerini oluşturan kaynak tabloları da etkiler ve aynı değişiklikler kaynak tablolara da yansır. VIEW kullanmanın önemli nedenlerinden bir tanesi sağladığı güvenliktir. Örneğin tablolarınızın tamanının görünmesini istemediğiniz zamanlarda sanal tablo kullanıp tablolarınızın tamamının görünmesini engelleyebilirsiniz. Karmaşık sorguları basitleştirmek, sorgu süresini kısaltmak ve ağ üzerindeki trafiği düşürmek, erişim izinlerini düzenlemek ve farklı sunuculardaki benzer verileri karşılaştırmak içinde kullanılır.
Oluşturulan VIEW'ler Object Explorer kısmında database/Views altında toplanır.

VIEW Oluşturma: VIEW oluşturmak için CREATE VIEW ifadesi kullanılır.

Genel Yapısı:
CREATE VIEW view_adı 
AS 
SELECT * FROM tablo_adi

Örnek1:
CREATE VIEW deneme_view 
SELECT EmployeeID, FirstName, LastName
FROM Employees

Örneğimizde Northwind veritabanında Employees tablosundan sadece "EmployeeID, FirstName, LastName" kullanarak yeni bir view oluşturalım ve "select * from deneme_view" ile sorgumuzu çalıştıralım.

Örnek2:
CREATE VIEW deneme2_view
AS
SELECT FirstName,LastName
FROM Employees
WHERE FirstName LIKE 'a%'
WITH CHECK OPTION
Bu örneğimizde diğerinden farklı olarak bir şart belirttik ve WITH CHECK OPTION ifadesini kullandık.
WITH CHECK OPTION: SQL Server'da VIEW tanımlarken örneğimizdeki gibi WHERE anahtar sözcüğüyle bir şart belirtmiş olabiliriz. Böyle bir VIEW nesnesini kullanırken de VIEW üzerinden tablolarımıza "INSERT, UPDATE, DELETE" işlemleri gerçekleştirebiliriz. 

Şimdi diyelimki oluşturduğumuz VIEW'e bir INSERT yapmamız gerekti;
insert into deneme2_view values('Bayraktar','İbrahim')
eklenme yapılmak istendiğinde "The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint. The statement has been terminated." hatasıyla karşılaşırız (VIEW oluştururken kullandığımız WITH CHECK OPTION ifadesinden dolayı 'a' ile başlamayan bir ekleme yapılamaz)

VIEW Silme: VIEW'leri silmek için DROP ifadesi kullanılır.

Genel Yapısı:
DROP VIEW view_adı
Örnek3:
DROP VIEW deneme2_view

VIEW Değişiklik Yapma: VIEW'ler üzerinde değişiklik yapmak için ALTER ifadesi kullanılır.

Genel Yapısı:
ALTER VIEW view_adı 
WITH seçenekler 
AS SELECT ifadesi

with schemabinding ifadesi ile kilitleme:
with schemabinding ifadesi VIEW'in bağlı olduğu tablodaki kolonları kilitleyip o kolonların silinmesini ve değişiklik yapılmasını engeller.

Genel Yapısı:
ALTER VIEW view_adı 
WITH schemabinding 
AS 
SELECT ifadesi

Örnek3:
CREATE VIEW deneme3_view
WITH SCHEMABINDING --sütunla ilgili bir değişiklik yapılması engellenir
AS
SELECT FirstName,LastName,City
FROM dbo.EMPLOYEES


with encryption ifadesi ile gizleme: 
VIEW'leri şifreleyip sorguların görünür olmasını engeller. Kaynakların  gizliliğini sağlayan koddur, Kullanıcı sadece oluşturulan VIEW ile ilgili verilere erişebiliR kaynak tablolarla ilgili hiç bir bilgiye ulaşamaz.

Genel Yapısı:
ALTER VIEW view_adı 
WITH encryption 
AS 
SELECT ifadesi

Örnek4:
CREATE VIEW deneme4_view
WITH ENCRYPTION --kaynak gizleme ve pasif design
AS
SELECT * FROM PRODUCTS

with encryption ifadesi kullanıldığında Object Explorer'da VIEW üzerinde kilit işareti belirir ve sağ click yapıldığından Design seçeneğinin pasifleştiğini görebiliriz.

SQL'de sp_helptext System Prosedürünün Kullanımı

sp_helptext prosedürü bizim tanımladığımız ya da sistemde bulunan objelerin tanımlamalarını text formatında gösterir. Böylece istediğimiz objenin tüm içeriğini nerede olduğunu aramadan direk  text içeriği ekrana döndürebiliriz.

Genel Yapısı:
exec sp_helptext '@objname'

Şimdi bir örnek ile olayı daha iyi kavrayalım. SP_ORNEK_1 sp'sinin içeriğini görüntülemek için;
use Northwind
exec sp_helptext 'SP_ORNEK_1'
yazmamış yeterli olacak. Bu komutun sonucunda ilgili Prosedürün text içeriği ekrana dökülür. SQL Server'da bir nesnenin SQL kodunu merak ediyorsanız sp_helptext bizim için en iyi araç. Tabi bu sp ile SQL Server'ın system sp, view ve diğer bileşenlerinin kodunu da görüntüleyebilirsiniz. Böylelikle merak ettiğiniz herhangi bir nesnenin nasıl kodlandığı incelenebilir.

use Northwind
exec sp_helptext 'Sales by Year'
Northwind veritabanı ile birlikte gelen "Sales by Year" isimli Prosedürün text içeriğini alalım.

SQL'de sp_help System Prosedürünün Kullanımı

sp_help System Prosedürü SQL'de  veritabanı ve sistem üzerindeki tüm tablolar, view ler, stored procedure ler gibi nesne tipleri hakkında ayrıntılı bilgi almamızı sağlar.

Genel Yapısı:
exec sp_help '@objname'

sp_help ile Nesneler hakkında bilgi almak için:  
use Northwind
exec sp_help
Örneklerde sıklıkla kullandığım Northwind veritabanındaki herbir objenin bilgilerini listeleyelim.

sp_help ile istenilen Obje hakkında bilgi almak için: 
use Northwind
exec sp_help 'Customers'
Northwind veritabanındaki Customers tablosu ile ilgili bilgileri listeleyelim.

24 Ekim 2014 Cuma

SQL Server'da Stored Procedure Temel Örnekler

okul adında bir veritabanı oluşturalım ve aktif çalışılacak şekilde belirleyelim.
CREATE DATABASE okul
USE okul

Oluşturduğumuz veritabanı içerinde ogrenci adında bir tablo yaratalım ve tabloya ait veri tiplerini belirleyelim.
CREATE TABLE ogrenci 
(
adi nvarchar(20),
soyadi nvarchar(25), 
ogr_no numeric(10),
bolum nchar(5),sehir nvarchar(30)
)

Oluşturduğumuz ogrenci tablomuzu kontrol amaçlı "liste" adında bir prosedür yazalım ve çalıştıralım.
CREATE PROCEDURE liste
AS
SELECT * FROM ogrenci

EXEC liste

Oluşturduğumuz ogrenci tablomuza  veri ekleme amaçlı "ekle" adında bir prosedür yazalım ve çalıştıralım.
CREATE PROCEDURE ekle
@isim nvarchar(20),
@sisim nvarchar(25),
@num numeric(10),
@bol nchar(5),
@il nvarchar(30)
AS
INSERT INTO ogrenci (adi,soyadi,ogr_no,bolum,sehir)
values(@isim,@sisim,@num,@bol,@il)


EXEC ekle 'İbrahim','BAYRAKTAR',3005,'BLG','YOZGAT'

Benzer şekilde eklediğimiz kayıtları silebilmek için bir "sil" prosedürü yazalım ve çalıştıralım.
CREATE PROCEDURE sil
@id numeric(10)
AS
DELETE FROM ogrenci WHERE ogr_no=@id

EXEC sil 3005

Eklemiş olduğumuz veriler üzerinde id belirterek kolaylıkla şehir kaydını değiştirebileceğimiz "guncelle" adında prosedürü yazalım ve çalıştıralım.
CREATE PROCEDURE guncelle
@il nvarchar(30),
@id numeric(10)
AS
UPDATE ogrenci SET sehir=@il
WHERE ogr_no=@id

EXEC guncelle 'ANKARA',3005

tablomuzda arama yapmak amacıyla kullanılacak basit bir arama prosedürü yazalım ve çalıştıralım.
CREATE PROCEDURE ara
@isim nvarchar(20)
AS
SELECT * FROM ogrenci  WHERE adi LIKE '%'+@isim+'%'

EXEC ara 'ib'

12 Ekim 2014 Pazar

SQL Server'da Stored Procedure

Genel Yapısı
CREATE PROCEDURE veya CREATE PROC prosedürAdı 
   [WITH Seçenekleri]
AS
   yazılacak procedure (SQL ifadeleri)
GO
CREATE PROCEDURE
veya
CREATE PROC
deyimi ile başlıyoruz ve prosedürümüzün ismini yazıyoruz.WITH seçeneği  stored procedure’un içinde bulunan kaynak kodlarını gizlemek için kullanılır. İsteğe bağlıdır. CREATE PROCEDURE ile AS deyimleri arasına parametreli stored prosedürler için değişken tanımlaması yapılır. Parametresiz prosedürler için herhangi bir tanımlama yapılmaz, AS yazılarak devam edilir. AS’den sonra prosedürün içine yazacağımız SQL ifadelerini yazarız ve GO deyimini de ekleyerek prosedürümüzü tamamlamış oluruz.  GO deyimi zorunlu değildir. Fakat genel kullanımda terchi edilmektedir.

Procedure yazıldıktan sonra çalıştırmak için "F5"
Stored Procedure'ümüzü tekrar çağırmak için:

EXEC prosedürAdı  

Stored Procedure'ler SQL Serverda resimdeki konumda bulunmaktadır.


NOT: CREATE PROCEDURE ifadesinin altında CREATE DEFAULT, CREATE RULE, CREATE TRIGGER, CREATE VIEW ve CREATE PROCEDURE ifadeleri kullanılamaz. Bir stored procedure oluşturulurken, bu procedure'ün içinde DEFAULT, RULE, TRIGGER, VIEW ve başka bir PROCEDURE oluşturulamaz. Bir stored procedure yaratılırken içinde bu belirtilenler dışındaki objeler yaratılabilir.

NOT:  
Stored Procedure oluşturabilmek için: 
System Administrator (sysadmin) 
Database Owner (db_owner)
Data Definiton Language Administrator (db_ddladmin) 
rollerine yada CREATE PROCEDURE  izni verilmiş bir role sahip olunmalıdır.

İlk Procedure'ümüzü Yazalım ve Çalıştıralım


Stored Procedure Nedir?

Prosedür, belli bir işlevi yerine getirmek için özellikle yapılandırılmış program parçacıklarıdır. 

Stored Procedure Database de tutulan ve ilk derlemeden sonra bir daha derlenmeye ihtiyaç duyulmayan SQL ifadeleridir. Kısaca SQL Server üzerinde barındırılan, T-SQL komutları ile hazırladığımız işlemler bütününün çalıştırılma anında derlenmesi ile bize bir sonuç üreten SQL Server bileşenidir. SP olarak anılırlar.
  • Bir prosedür, başka bir prosedür içerisinde çağrılabilir.
  • Bir programlama dilindeki fonksiyonlar gibi parametre alabilirler. 
  • Bu parametrelere göre bir sorgu çalıştırıp cevap gönderilirebilir.  
  • Stored Procedure'ler database server'ında saklanmasından dolayı daha hızlı çalışırlar. 
  • Bir stored procedure ilk çalıştırıldığı zaman derlenir. Bir daha çalıştırılınca derlenmeden çalışırlar. 
  • Bir SQL komutu çağrıldığında ayrıştırma , derleme ve çalıştırma aşamalarından geçmektedir.
  • Stored Procedure'ler önceden derlenmiş olduğu için , normal kullandığımız bir SQL sorgusunda olduğu gibi bu 3 aşamadan geçmez, bu özelliği sayesinde programımızın performansı artmaktadır ve ağ trafiğini de azaltmış oluruz, istemci tarafından bir çok satıra sahip SQL komutunun sunucuya gitmesindense, sadece saklı yordamın adının sunucuya gitmesi ağı daha az meşgul etmiş olur. 
  • Bir kez yazıp tekrar ve tekrar kullandığımız için modüler bir yapıda program geliştirilmesi sağlanır. 
  • Stored Procedure'lerin diğer bir özelliği ise programlama deyimleri içermesidir. if, next, set vs..  
  • Stored Procedure'ler sadece giriş ve çıkış parametreleri uygulama katmanında göründüğü için daha güvenilirdir. 

Stored Procedure Tipleri : 
  • Extended Stored Procedure: DLL'ler tarafından, SQL Server dışında kullanılan stored procedure'lerdir. xp ifadesi ile başlayan bu tür stored procedure'ler, bazı system stored procedure'leri tarafından da çağrılarak kullanılabilir.
  • CLR Stored Procedure: CLR ortamında herhangi bir dili kullanarak da Stored Procedure'ler geliştirilen bir tür Stored procedure çeşididir.
  • Sistem Stored Procedure : sp_ ön eki ile başlarlar ve master veri tabanında tutulur.  
  • Kullanıcı Tanımlı Stored Procedure : Programcının programladığı stored procedurlerdir. 

Copyright 2013-2017 | İbrahim BAYRAKTAR /dev/null Web Günlüğü