SQL Server Hakkında genel Bilgiler

gölge_adam

Katılımcı Üye
20 Şub 2007
517
8
TeXaS
Kurumsal güveni hak ediyor
İş dünyasında giderek büyüme eğilimi gösteren kurumsal sistem altyapısı ve web sitelerinin gereksinimi olan güvenilirlik ve ölçeklenmeyi SQL Server 2000 çeşitli işlevleriyle garanti ediyor. Distributed Partitioned Views ve log yükleme özellikleri, simetrik çoklu işlemcili (SMP) sistemlerin tüm avantajlarını değerlendirirken, işlemleri de dengeli bir şekilde dağıtarak veri trafiğinden kaynaklanabilecek olası sorunları başından önlüyor.
Distributed Partitioned Views, SQL Server verilerini bölerek (partitioning) veritabanı işlem yükünü sunucu grubu içinde dağıtmaya yarıyor. Verilerin dağıtıldığı sunucular bölümlenmiş verinin yönetimi için işbirliği yapıyor fakat bağımsız çalışabiliyorlar. Veriler bölümlense de veritabanı üzerindeki bu bilgilere ulaşmaya çalışan tüm uygulamalar, veritabanının sunucular üzerindeki dağıtık yapısından bağımsız şekilde veritabanını bir bütün olarak görebiliyor. Bu arada tüm sunucular, veritabanı sorguları ve sorgu güncellemeleri, veri tarama işlemleri ve veri güncellemeleri için bağlantıları kabul ediyor.
Log Shipping de SQL Server 2000 ile gelen yeni bir özellik. Sistemlerin sürekli çalışır durumda olması gereken ortamlarda sunucular arasında işlem kayıt dosyalarını (log) aktararak verilerin zamanında ilgili yerlerde yedeklenmesini sağlıyor

SQL SERVER NEDİR ?

Microsoft SQL Server Client-Server ve web tabanlı uygulamalarda ihtiyaç duyulan veri depolama çözümlerinde kullanılan bir server yazılımıdır.

SQL Server’ı iki tür veritabanını yönetmek için kullanırız. Bunlar OLTP (Online Transaction Processing) veritabanları ve OLAP (Online Analytical Processing) veritabanları. Genel olarak farklı client’lar network üzerinden haberleşerek veritabanlarına erişirler.

SQL Server ile terabyte boyutundaki veritabanlarını yönetebilirsiniz. Birden fazla server arasında Windows Clustering yaparak SQL Server’ı kullanabilirsiniz.

SQL SERVER’A GİRİŞ

SQL Server ile yoğun verileri işleyebilir, saklayıp analiz edebilir ve yeni uygulamalar geliştirebilirsiniz. SQL Server OLTP ve OLAP için gerekli olan veri saklama ürünlerini ve teknolojilerini destekler. SQL Server bir ilişkisel veritabanı yönetim sistemidir (RDBMS: Relational database management system).SQL Server;

· Veri işleme ve analiz için saklanan veri yığınlarını yönetebilir.
· Client uygulamalarından gelen isteklere cevap verebilir.
· SQL Server ve clientlar arasında veri göndermek için T-Sql (Transact SQL), XML, MDX veya SQL-DMO kullanabilir.

İlişkisel Veritabanı Yönetim Sistemi (RDBMS)

Bir RDBMS aşağıdaki işlemlerden sorumludur;
  • Bir veritabanındaki veriler arasında ilişkiler kurmak
  • Verileri hatasız bir şekilde saklamak ve veriler arasında tanımlanan ilişkileri bozmamak
  • Bir sistem hatası durumunda tüm verileri kurtarabilmek
Veri saklama modelleri

SQL Server OLTP ve OLAP veritabanları yönetebilir.

OLTP Veritabanları: Bir OLTP veritabanı içinde veriler genellikle ilişkisel tablolar içinde organize edilir. Gereksiz veri yığınları azaltır ve veri güncelleme hızını arttırır. SQL Server çok sayıda kullanıcının gerçek zamanlı olarak veri analiz edebilmesini ve güncellemesini sağlar. Örnek olarak OLTP veritabanları havayolu bilet satış bilgileri ve bankacılık işlemlerini içerir.

OLAP Veritabanları: OLAP teknolojisi büyük verilerin organize edilmesi ve incelenmesini sağlar. Örneğin bir analist büyük verileri hızlı ve gerçek zamanlı olarak değerlendirebilir.SQL Server Analiz Servisi toplu raporlama ve analizde, veri modelleme ve karar desteğe kadar geniş alanda çözümler sunar.


Client Uygulamaları
Kullanıcılar SQL Server ve Analiz Servisine direct olarak ulaşamaz; verilere erişmek için yazılmış client uygulamaları kullanırlar. Bu uygulamalar SQL Server aşağıdaki yöntemlerle ulaşırlar;

Transact-SQL: Bu sorgulama dili SQL’in farklı bir versiyonudur. SQL Server kullanıcıları için birincil bir sorgulama ve programlama dilidir.
XML: Bu format bir sorgu ve prosedürün çalışması sonucu gelen verinin HTTP üzerinden URL veya şablonlar kullanılarak iletilmesidir. XML’I veritabanina veri girerken, güncellerken ve silerken kullanabilirsiniz.

MDX: MDX bir OLAP veritabanı içindeki çok boyutlu objelerin, sorguların ve çok boyutlu verilerin düzenlenmesini ifade eder.

OLE DB ve ODBC API’leri: Client uygulamaları veri tabanına komut gönderirken OLE DB ve ODBC API’lerini kullanırlar. Bu API’leri kullanarak gönderilen komutlar T-SQL dilini kullanırlar.

ActiveX Data Objects ve ActiveX Data Objects (Multidimensional)

ADO ve ADO MD Visual Basic, ASP, VB Script programlama dillerinde OLE DB’yi kapsamak için kullanılır. OLTP veritabanları içindeki verilere erişmek için ADO kullanılır. Analiz Servisi veri küpleri içindeki verilere erişmek için ise ADO MD kullanılır.

English Query: Bu uygulama ile kullanıcılar doğal dillerini kullanarak karmaşık T-SQL ve MDX yapılarını kurarak veritabanıdan bilgi elde edebilirler. Örneğin bir kullanıcı “Satış bölümünün bu ay ki cirosu nedir ?” diye bir soru sorabilir. Adındanda anlaşıldığı gibi sorularda ingilizce dili kullanılır.

Client-Server Bileşenleri

SQL server verileri saklamak ve tekrar almak için client, server bileşenlerini içerir. SQL server uygulamaları temel network ve protokollerden izole etmek için katmanlı iletişim modelini kullanır.Bu yapı uygulamanız farklı network ortamlarında kullanmanızı sağlar.

Client-Server Mimarisi

SQL server iş yükünü azaltmak için server ve clientlar üzerindeki iş yükünü parçalara böler.
  • Client uygulama ticari hesaplama ve bunların kullanıcıya gösterilmesinden sorumludur. Bunlar her ne kadar client üzerinde çalışsa bile veri sorgularken server üzerinde çalışır.
  • SQL Server birden fazla gelen istekleri karşılayabilmek için disk, bellek, işlemci ve bant genişliği gibi kaynakları yönetebilir.
Client-Server mimarisi ile çeşitli ortamlar için uygulamalar dizayn edip geliştirebilirsiniz. Client uygulaması çeşitli bilgisayar ortamlarında çalışır ve SQL Server ile network üzerinden haberleşir.

Client Bileşenleri:

Haberleşme mimarisinde client bileşenleri aşağıdakileri içerir;

Client Applications: Bir client uygulamasındaki amaç T-SQL kodlarını göndermek ve sonuçları almaktır. Veritabanı API’si kulanarak bir client uygulaması geliştirebilirsiniz. Böylece SQL Server ile haberleşmek için kullanılan network protokolünü bilmeye gerek yoktur.

Database API: Database API’leri bir driver veya DLL kullanarak T-SQL kodlarını geçirir ve sonuçları alır. Bu T-SQL kodlarını gönderirken ve sonuçları alırken client uygulama ile SQL Server arasında kullanılan bir arayüzdür.

Client Net-Library: Client Net-Library network bağlantılarını control eder ve verileri client’a yönlendirir. Bu bir çeşit veritabanı isteklerini ve sonuçlarını paketleyip çeşitli network ortamlarında taşıyan haberleşme yazılımıdır.

Server Bileşenleri:

Haberleşme mimarisinde server bileşenleri aşağıdakileri içerir;

Server Net-Libraries: SQL Server aynı anda birçok Net-Library’leri izleyebilir. Bağlantının sağlanabilmesi için Client Net-Library ve Server Net-Libraries aynı olmalıdır. SQL Server şu protokollere destek verir; TCP/IP, Named Pipes, NWLink, IPX/SPX, VIA ServerNet II SAN, VIA GigaNet San, Banyan VINES ve AppleTalk.

Open Data Services: SQL Server’ın bir bileşeni olan bu uygulama network bağlantılarını izler, client isteklerini çalıştırmak üzere SQL Server’a geçirir ve sonuçları tekrar client uygulamaya döndürür. Open Data Services SQL Server’a yüklenmiş olan tüm Net-Libraries’I dinler.

Relational Engine: T-SQL kodlarını çalışabilir parçalara böler, optimizasyonunu yapar, tanımlanmış diğer kodları çalıştırır ve güvenliği sağlar.

Storage Engine: Storage Engine veritabanı dosyalarını, dosyalardaki boş alanları, fiziksel sayfalara veri giriş çıkışını, veri önbelleklerini, loglamaları, kurtarma operasyonlarını yönetir.
Client-Server Haberleşme İşlemleri

Client ve Serverlar tipik olarak bir network üzerinden haberleşirler. Aşağıdaki adımlar bir sorgunun veritabanı API’si kullanılarak hangi aşamalardan geçtiğini göstermektedir.

1. Bir client uygulaması sorgu gönderir. Client uygulama API’yi çağırır ve sorguyu verir. API driver veya DLL’I kullanarak sorguyu bir veya daha fazla TDS (Tabular Data Stream) paketlere gruplar ve Client Net-Library’e geçirir.

2. Client Net-Library bu paketleri networkte taşınabilecek şekilde paketler. Client Net-Library windows interprocess communication (IPC) API’sini çağırır ve işletim sisteminde yüklü olan protocol üzerinde bu paketleri server net-libraries’e gönderir. Server net-libraries bu network paketlerini çözer ve TDS paketlerinin elde eder. Data sonar bu TDS paketlerini Open Data Services’e geçirir.

3. Open Data Services bu TDS paketlerini açar ve sorguyu relational engine’e verir. Relational engine bu sorguyu derler ve optimizasyonu yapılmış çalışabilir bir şekle çevirir ve çalıştırır. Relational engine storage engine ı ile OLE DB arayüzünü kullanarak haberleşir.

4. Storage engine databaseden dönen verileri data buffer’a oradan relational engine’e verir. Relatinal Engine gelen verilere son şeklini verir ve Open Data Services’e geçirir.

5. Open Data Services bu verileri Server Net-libraries, network protokolü, client net-library ve database API kullanarak client’a iletir. Bu sonuçlar XML şeklinde de iletilebilir.
 

gölge_adam

Katılımcı Üye
20 Şub 2007
517
8
TeXaS
SQL Server Servisleri

Microsoft SQL Server aşağıdaki servisleri içerir;

MSSQLServer service, SQLServerAgent service, Microsoft Distributed Transaction Coordinator (MS DTC) ve Microsoft Search. Bu servisler genellikle Windows 2000 üzerinde servis olarak çalışırlar fakat uygulama gibi de çalışabilirler.

MSSQLServer Service:MSSQLServer bir veritabanı motorudur. Tüm T-SQL yapılarını çalıştıran ve veritabanını kapsayan tüm dosyaları yöneten servistir. MSSQLServer servisi;


1. Sistem kaynakları birden fazla kullanıcıya paylaştırır
2. Mantıksal hataları engeller. Mesela bir datayı aynı anda güncellemek isteyen kişileri engeller.
3. Veri bütünlüğünü sağlar.

SQLServerAgent Service:Bu servis SQL Server ile birleşik olarak çalışır ve alert’leri ve multiserver işlemlerin yönetilmesini sağlar.

1. Alert’ler bir işlemin sonuçları hakkında bilgi verir. Mesela bir sorgu bitti veya çalışma sırasında bazı hatalarla karşılaşıldı gibi.
2. SQLServerAgent görev oluşturma ve zamanlama aracı ile bazı işlemlerin otomatikleştirilmesini sağlar.
3. SQLServerAgent servisi bir problem olduğunda mail atabilir, çağrı cihazına mesaj gönderebilir veya başka bir uygulamayı çalıştırabilir. Mesela bir veritabanı dolduğunda veya bir yedekleme işlemi bittiğinde size mail atmasını sağlayabilirsiniz.

Microsoft Distributed Transaction Coordinator:MS DTC bir işlem ile birden fazla farklı kaynağın üzerinde işlem yapılmasını sağlar. Mesela bir işlem ile tüm serverlar üzerinde kalıcı bir güncelleme işlemi yapabilir veya yapılmış bu işlemi hepsinden geri alabilir.

Microsoft Search:Microsoft Search Windows 2000 üzerinde çbir servis olarak çalışan full-text bir arama motorudur.

SQL Server Entegrasyonu

SQL Server Microsoft işletim sistemi ve diğer server uygulamaları ile bütünleşik çalışabilen client-server bileşenlerine sahiptir. Farklı işletim sistemleri üzerinde bulunan Internet tarayıcıları ve diğer üçüncü parti yazılımlar SQL Server’a erişebilmektedir

İşletim Sistemi ve SQL Server Entegrasyonu

SQL server belirttiğimiz gibi farklı işletim sistemleri üzerinde çalışabilen client ve server bileşenlerine sahiptir.

Client Bileşenleri:SQL Server 2000’nin tüm versiyonlarındaki client bileşenleri Windows CE sürümü hariç tüm Windows 2000, Windows NT, Windows ME 95 ve 98 sürümleri üzerinde çalışabilmektedir.Tüm SQL Server CE sürümü bileşenleri ise Windows CE üzerinde çalışabilmektedir.

Server Bileşenleri:SQL Serverin değişik sürümleri Windows 2000, CE, ME, 98 ve 95 işletim sistemleri üzerinde çalışabilmektedir. İşletim sistemi ve SQL server’in spesifik özelliklerinden dolayı server bileşenlerinde bazı kısıtlamalar olmaktadır. Mesela Windows NT 4.0 üzerine SQL Server 2000 kurabilmek için SP5 gerekmektedir. Ve sadece veritabanı motoru ve analiz server gibi server bileşenleri işletim sistemine gore kısıtlanmaktadır. Örneğin Windows 2000 Pro, ME, 98, 95 ve NT Workstation gibi işletim sistemlerine SQL Server 2000 Enterprise Edition’I kuramazsınız sadece SQL Server 2000 EE Cd’sini client yazılımını kurmak için kullanabilirsiniz.

SQL Server 2000 ve Windows 2000 Entegrasyonu

SQL Server tam anlamıyla Windows 2000 ile entegre olabilmekte ve Windows 2000’nin özelliklerinden ileri gelen tüm avantajlarından faydalanabilmektedir.

Active Directory:Serverlar ve özellikleri server start edildiğinde otomatik olarak active directory içine kaydedilmektedir. Kullanıcılar istedikleri server’a active directory search kullanarak erişebilmektedirler. Örneğin; Bir kullanıcı bir veritabanını tüm SQL Server’la üzerinde aratabilmektedir. Veya Active Directory üzerinden SQL Server üzerindeki veritabanlarıa bakabilmektedir.

Security:SQL Server Windows 2000 güvenlik sistemine entegre olarak çalışmaktadır. Bu entegrasyon kullanıcıların tek bir kullanıcı ismi ve şifresi ile hem SQL Server’a hem de Windows 2000 kaynaklarına erişmesine izin vermektedir. SQL Server Windows 2000 encryption metodlarını kullanmaktadır. Kerberos gibi. SQL Server Windows 2000 güvenliğinden ayrı olarak kendiside güvenlik sistemi barındırmaktadır. Kullanıcılar Windows 2000 den ayrı olarak SQL Server kullanıcı ismi ve şifrelerinede sahip olabilmektedir.

Multiprocessor Desteği:SQL Server Windows 2000’in SMP(Symmetric multiprocessing) özelliğini de desteklemektedir. SQL server sisteme eklenen yeni bir işlemcinin avantajlarından otomatik olarak faydalanablmektedir.

Microsoft Olay Günlüğü (Event Viewer):SQL Server sorunların takip edilebilmesi ve çözüme kavuşturulabilmesi için Windows 2000’de kullanılan olay günlüğünün uygulama, güvenlik ve system alanlarına mesajlar yazabilmektedir.

Windows 2000 Component Servisleri:Component servisleri COM ve Transaction Server’a dayanmaktadır. Böylece daha fazla işlem, güvenlik, yönetim kolaylığı, uygulama yönetimi, uygulama paketleme özelliklerinden faydalanılabilmektedir.


Windows 2000 Sistem Monitörü:SQL Server system monitörüne performans ölçülerini gönderebilmektedir. Böylece SQL Serverin değişik açılardan performansı incelenebilmektedir.

Microsoft Internet Information Service:Internet tarayıcısı ile SQL Server veritabanlarına erişimi sağlamaktadır.

Windows Clustering:SQL Server Windows 2000 Advanced Server’in bir özelliği olan clustering servisinden faydalanabilmektedir. Böylece makinalardan bir tanesinde sorun olursa diğer makinaya konumlanabilmekte ve işlemler aksamadan devam etmektedir.



SQL Server ve Diğer Microsoft Server Uygulamaları Entegrasyonu

SQL Server en iyi şekilde diğer Microsoft Server uygulamaları ile entegre olabilmektedir. Microsoft bir grup server uygulamaları ile iş çözümleri üretmenize yardımcı olmaktadır. Aşağıdaki tabloda SQL Server ile sıkça beraber kullanılan server’lar listelenmiştir.

Microsoft Exchange Server:SQL Server’in email göndermesini sağlamaktadır. SQL Server veritabanında problem olduğunda veya belirlenen senaryolar sonucunda ilgili kişilere mail atabilmektedir.

Microsoft Host Integration Server 2000:PC tabanlı networkleri SNA protokolünü kullanarak IBM ortamlarına bağlamaktadır. Böylece SQL Server IBM mainframe ve AS/400 uygulamaları ile entegre olabilmektedir.

Microsoft System Mnagement Server:Bilgisayar yazılımlarını, donanımlarını ve SQL Server veritabanlarını yönetmeye yardımcı olur.


SQL SERVER İLE UYGULAMA GELİŞTİRME

Web Tabanlı Uygulamaların işlevliği arttıkça kontrolleri de artmaktadır. Bu ise çok fazla kontrol kodu demektir. Server-Side kodlar, Client-Side kontroller, grafik tasarım, DHTML derken ASP sayfamız içinden çıkılmaz bir hale dönüşebilir. Özellikle uygulamaya yeni modül eklentilerinde, baştaki tasarımınıza bağlı olarak yama yapabilir yada her şeye yeniden başlayabilirsiniz. Öte yandan uygulamanızın efektif kullanımına yönelik performansı da düşünmek zorundasınız. Bu amaçla bileşenler oluşturabilir ya da mevcut bileşenlerden faydalanabilirsiniz; ayrıca grafik tasarım ve ara yüz standardını da belirlemeniz gerekir. Tüm katmanların aynı yerde farklı kodlanması ve kontrolü, standartlaşma ve birlikte çalışabilirlik unsurları da dikkate alındığında, sistem tasarımcılarını üzerinde çok fazla düşündürmektedir.


Bu anlatımda ki temel amacım bir web tabanlı uygulamanın mümkün olduğunca çok yönlü, çok amaçlı ve kullanışlı (generic) bir yapıda olmasını sağlamak için tespit ettiğim arayışlardır. Bildiğiniz gibi veritabanına bağlı uygulamalarda yoğunlukla veri girişi, düzenleme, sorgulama ve silme gibi işlemler yapılmaktadır. Bunun için veritabanından bir tablonun kayıtlarını kullanıcı ekranına listeleriz ve gerekli butonlar vasıtası ile interaktif olarak kullanıcıdan istek bekleriz. Standart veritabanı işlemleri dışında uygulamadan yapılması istenen özel durumlarda kod yazarak kontrol oluşturmamız gerekir. Örneğin veritabanından gelen kayıt listesinin kullanıcının istediği alana (column) göre sıralama (sort) işleminin artan yada azalan şekilde yapılabilmesi.


Bu aşamada uygulamanın sistem mimarisinde üç ana unsur ortaya çıkmaktadır. Sistem tasarımı, veritabanı tasarımı ve ara yüz tasarımı. Kullanıcı-Uygulama iletişimini sağlayan ara yüz standardı büyük önem kazanmaktadır. Sistem mimari tasarımında kullanıcıya anlaşılır (user friendly) ara yüzler tasarlamak ve standartları belirlemek, varsa belirlenmiş standartlara uymak, oluşturacağımız generic yapıda en önemli unsur olacaktır. Kullanıcının isteklerini bildireceği ara yüz tasarımında standartları belirlemek ve yerleşik bir ortamda (XML gibi) tutmak uygulamanın geliştirilmesi ve uygulamalar arası entegrasyon açısından fayda sağlayacaktır. Tasarım aşamasında ihtiyaçlar ve iş gereçlerini planlayarak ara yüz standart oluşumuna yansıtmak gerekir. Büyük bir ivme ile yaygınlaşan XML teknolojilerini bu amaçla kullanım gerekliliği aşikardır. Bunun yanı sıra arka planda server-side kodlarla veritabanı ile yapılan iletişimlerde XML büyük efektiflik sağlayacaktır.

Bir dinamik ASP sayfasının oluşumunda, ara yüz standartlarını belirleyeceğimiz iş akışını veritabanında saklayabiliriz. Bunu açacak olursak veritabanında ki nesneler ve özelliklerine göre asp sayfasının nasıl davranacağını belirlemek ve kullanıcının rahat davranabilmesi sağlayacak ara yüz tasarımı oluşturmak için gerekli iş adımlarını veritabanına gömmek olarak tanımlayabiliriz. Üzerinde düşünüldüğünde bu generic yapıyı, veritabanı özelliklerini kullanarak oluşturabileceğimizi görebiliriz. Böylece karmaşık uygulamalarda bile iyi bir veritabanı ve ara yüz tasarımı ile ölçeklenebilir, genişletilebilir ve performans kazançlı web tabanlı uygulamalar geliştirebiliriz. Bunun için mevcut araçların ( XML, Database ) özelliklerini iyi bilmemiz ve nerde nasıl kullanabileceğimiz Tespit etmemiz gerekir.


SQL Server 2000 'da Sütun (column) Description Değerinin Alınması


Microsoft SQL Server 2000'deki SQL Server Enterprise Manager içinde herhangi bir tablonun Table Design penceresini açtığınızda, pencerenin alt yarısında seçili sütunun (column) bazı özellikleri listelenir. Bunlardan birsi de Description (Tanım) özelliğidir. Enterprise Manager Description özelliği bir genişletilmiş özelliktir (extended property).

Bu genişletilmiş özellikleri bazı veritabanı nesnelerinin bilgilerini saklamak için kullanabiliriz. Ben burada sizlere tablolar (tables) ve sütünların (columns) Description genişletilmiş özellik tanımlanmasını ve bu bilgileri ASP sayfası içinden nasıl elde edileceğini (retrieve) anlatmaya çalışacağım.SQL Sever 2000'de genişletilmiş özellikleri almak için bir sistem fonksiyonu tanımlanmıştır. Bu fonksiyon fn_listextendedproperty() sistem fonksiyonudur. Bu fonksiyonun sözdizimi (syntax) aşağıdaki gibidir.

Syntax
fn_listextendedproperty(
{default | [ @name = ] 'property_name' | NULL }
, {default | [ @level0type = ] 'level0_object_type' | NULL }
, {default | [ @level0name = ] 'level0_object_name' | NULL }
, {default | [ @level1type = ] 'level1_object_type' | NULL }
, {default | [ @level1name = ] 'level1_object_name' | NULL }
, {default | [ @level2type = ] 'level2_object_type' | NULL }
, {default | [ @level2name = ] 'level2_object_name' | NULL }
)

Aşağıdaki sözdizimi veritabanındaki table nesnesinden T1 tablosunun tüm sütunlarının (column) genişletilmiş özellikleri listeler. Eğer 'column' nesnesinden sonra default yerine tabloda herhangi bir sütun adını verirsek o sütunun genişletilmiş özellikleri listelenecekti.

SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'T1', 'column', default)

Veritabanımızda belediye bilgilerini tutanil_t_belediye adında bir tablomuz olsun. Tablomuzun Table Design penceresi yandaki şekilde olduğu gibidir. Gördüğünüz gibi belediyead sütununun Description özelliğne ' Belediye Adı ' değeri atanmıştır.
Aşağıdaki SQL cümleciğinde tablo adını il_t_belediye ve sütun adını belediyead olarak girersek; SQL Server Query Analyzer'da çalıştırdığımızda aldığımız sonuç nesne tipinin sütun (COLUMN) olduğunu , nesne isminin ' belediyead ' ve değerinin (value) ise ' Belediye Adı ' olduğunu görebiliriz.

image001.gif


image002.gif


Yukarıdaki örnek SQL cümleciğinde bir sütunun Description genişletilmiş özelliğinin nasıl alınacağını gördünüz. Şimdi ise veritabanında depolanan bu bilgiye ASP sayfasından nasıl erişebileceğimize bakalım.Öncelikle bu fonksiyonu dinamik bir yapıda kullanacağımızı düşünürsek, veritabanına erişen bir bileşen (ActiveX DLL) haline getirmek bir çok açıdan daha uygun olacaktır. Bu amaçla Visual Basic ortamında geliştirdiğim FileldDesc() fonksiyonu aşağıdaki gibidir. FileldDesc() fonksiyonuna değişken olarak gelecek sTableName ve sFieldName değerlerini strSQL cümleciğinde veritabanından sorgulayarak veritabanında gelecek olan sütun Description değerini (value) döndürür.

Not : Kodda görmüş olduğunuz OpenRS ve CloseRS birer Private fonksiyon olup ADO'nun Connection ve Recordset nesnelerini kullanarak veritabanına bağlantı ve kayıt seti oluşturma işlevlerini yapmaktadır.


Public Function FieldDesc(ByVal strConn As Variant, ByVal sTableName As Variant, &_ ByVal sFieldName As Variant) As Variant
Dim sFieldNameAs String
OpenRS strConn
strSQL = "SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', &_ '" & sTableName & "', 'column', '" & sFieldName & "')"
rs.Cursor******** = adUseServer
rs.Open strSQL, conn, adOpenStatic
If Not (rs.BOF or rs.EOF) Then
sFieldName = rs("value")
End If
FieldDesc = sFieldName
CloseRS
End Function



Son olarak oluşturduğumuz bileşeni (ActiveX DLL) ASP sayfamızdan nasıl çağıracağımızı görelim. Öncelikle Server nesnesinin CreateObject metodunu kullanarak oluşturduğumuz ActiveX bileşeninden bir örnekleme (instance) nesne oluşturmamız gerekir. Aşağıda gördünüz gibi ActiveX DLL'mizin adı SQL2kObj.dll, Class Module adı da DBDesc 'dir. ActiveX bileşenimizden objSQL2kDB isimli bir nesne örnekledik.


<% Set objSQL2kDB = Server.CreateObject("SQL2kObj.DBDesc") %>


Aşağıdaki örnek ara yüzde gördünüz üzere; il_t_belediye tablosunun tüm sütun (column) Description değerlerini dinamik bir yapıda yazdırmak istediğimizde objSQL2kDB nesnemizin FieldDesc metodu değerlerini (attributes) aşağıdaki gibi tanımlayabiliriz. Aşağıdaki kodu bir döngü içinde kullanırsak, tablonun tüm sütun adlarını fonksiyona gönderebilir ve fonksiyonda veritabanından Description değerlerini bize geri döndürerek istediğimiz alana yazdırmış oluruz.

<%strConn = "Veritabanına bağlantı string'i" %>
<TD><%Response.Write objSQL2kDB.FieldDesc(strConn, "il_t_belediye", fld.name)%></TD>



image003.gif


Yukarıdaki arayüzde gördüğünüz üzere kayıtları veritabanından listelerken sütun adlarını da daha önce veritabanında tanımladığımız sütun Description genişletilmiş özelliklerden alarak dinamik olarak yazdırabiliriz.
 

gölge_adam

Katılımcı Üye
20 Şub 2007
517
8
TeXaS
SQL Server 2000 sysforeignkeys Sistem Tablosunun Kullanımı
Bu örnekte, veritabanımızda il_t_belediye ve il_t_il tabloları var ve bu tablolar arasında bir ilişki (Relationship) kurulmuştur. Şekil'den de anlaşılacağı üzere il_t_il tablosu (Primary key table) ilkod alanı ile il_t_belediye tablosu (Foreign keytable) ilkod alanlarıarasında birden çoğa (one to many) bir ilişki vardır. Yani Belediye Bilgileri tablosundaki ilkod sütunu İller tablosundaki bir sütuna referans eder.
Burada size anlatmaya çalışağım konu Belediye Bilgileri kayıtlarını ekrana yazdırırken, il_t_belediye tablosunda ilkod (Foreign Key) sütunundaki il kodu değeri yerine, referans eden İller Tablosunda ilkod (Primary Key) değeri ile eşleştirerek karşılık gelen ilad sütunundaki İl Adı değerini İller Tablosundan çekerek yazdırmak.
Bir tabloda bulunan foreign key bir sütunun (column) veritabanında referans eden Primary Key sütuna ulaşmak için veritabanında ki sistem tablolarından sysforeignkeys sistem tablosundan faydalanacağız. SQL Server Query Analyzer'da aşağıdaki SQL cümleciğin WHERE koşuluna foreign key tablo adını yazarsak bize referans eden primary key tablo ve sütun adını getirecektir.

image001.gif



Bu bilgileri ASP sayfalarımızda dinamik olarak kullanabilmek için yukarıdaki SQL cümlesini kullanarak daha önce oluşturduğumuz SQL2kObj.dll ActiveX bileşenimize bir fonksiyon daha ekleyelim.
Bu fonksiyona foreign key sütun adını (sFieldName), değerini (sFieldValue), refereans eden tablodaki kaçıncı sütunu yazdırmak istediğimizi (nWhichField) ve foreign key tablo adını gönderiyoruz.
Kodu inceleyecek olursak; pkSQL cümlesinin WHERE koşulunda foreign key tablo adını (sTableName) göndererek sysforeignkeys sistem tablosundan referans eden primary key tablo adı/adlarını ve sütun adı/adlarını alıyoruz. Foregin key tablomuz veritabanında birden fazla tabloya referans edebileceğini düşünerek oluşacak kayıt setinde bir döngü ile 'column_name' ile foreign key (sFieldName) alanımız arasında eşitlik arıyoruz. Kayıt setinde foregin key (sFieldName) sütununa karşılık gelen primary key tablo adını tespit ettikten sonra SELECT cümlesi ile bizim foregin key sütunumuzun değeri ile primary key tablodaki karşılık gelen sütunun değerini alıyoruz. Eğer değer dönerse daha önceden karar verdiğimiz (sWhichField) primary key tablo sütununun değerini fonksiyona atıyoruz. Dolayısı ile bize bu fonsiyon bize dinamik olarak primary tablosunu bularak bu tablodan istediğimiz sütun değerini yazdırmamızı sağlıyor.
Burada fonksiyonu generic bir yapıda kurduğumuzdan fonksiyona foreign key tablo adı verilmediği takdirde değer dönmeyeceğinden bir flag tutuyoruz ve fonksiyon sonucunda gönderilen sütun değerini (sFieldValue) tekrar fonksiyona atıyoruz.
Public Function FindPkFld(ByVal strConn As Variant, ByVal sFieldName As Variant, &_ ByVal sFieldValue As Variant, ByVal nWhichField As Variant,&_ ByVal sTableName As Variant) As Variant

Dim Flag As Boolean
Dim sPKey As String
Dim pkSQL As String
Dim consulta As ADODB.Command
Dim rsconsulta As ADODB.Recordset

OpenRS strConn
Flag = False

pkSQL = "SELECT object_name(fkeyid) as FKey_Table, "
pkSQL = pkSQL + "col_name(fkeyid, fkey) as column_name, "
pkSQL = pkSQL + "object_name(rkeyid) as PKey_Table, "
pkSQL = pkSQL + "col_name(rkeyid, rkey) as referenced_column_name "
pkSQL = pkSQL + "FROM sysforeignkeys "
pkSQL = pkSQL + "WHERE object_name(fkeyid) = '" & sTableName & "'"
rs.Cursor******** = adUseServer
rs.Open pkSQL, conn, adOpenStaticDo While Not rs.EOFIf rs("column_name") = sFieldName Then
Set consulta = New ADODB.CommandSet consulta.ActiveConnection = connconsulta.CommandText = "SELECT * FROM " & rs("referenced_table_name") &_
" WHERE " & rs("referenced_column_name") & "=" & sFieldValueSet rsconsulta = consulta.ExecuteIf Not (rsconsulta.EOF And rsconsulta.EOF) Then
sPKey = rsconsulta(nWhichField)End If
Set rsconsulta = Nothing
Set consulta = Nothing
Flag = True
FindPkFld = sPKeyEnd If
rs.MoveNextLoop
If Flag = False Then
FindPkFld = sFieldValueEnd If
CloseRS
End Function


QL ile veritabanı sorgulama
Select ifadesini kullanmadan önce hangi veritabanı ve tablolar ile işlem yapacağımızı bilmeliyiz. Verilerle işlem yapmadan önce bazı komutlarla bu verilerin çekilmesi gerekmektedir. Bu komutlara SQL ifadesi diyoruz. Select ifadesi ile seçmek istediğiniz kolon ve satırları belirtebilirsiniz.

Select ifadesinin kullanımı :

Select ifadesi veritabanından bilgi çekmek için kullanılır. Select ifadesi ile istediğiniz kolan ve satırları belirtebilirsiniz.

· Select ifadesi istenen satırları bir liste şeklinde verir.
· WHERE ifadesini kullanarak sorgunuzu filtreleyebilir ve sadece sizin kriterlerinize uygun satırların sorgu sonucu olarak gelmesini sağlayabilirsiniz. Bu kriterler lojik ifadeler, karşılaştırmalar olabilir.
· FROM ifadesi bu verilerin alınacağı tablo isimlerini belirtmemizi sağlar.
Kolonların belirlenmesi :

Sorgu sonucunda tablodaki tüm kolonlar değil de sadece işinize yarayacak kolonların gelmesini isteyebilirsiniz. Bu durumda istediğiniz kolanların her birinin adını belirmek zorundasınız. Select’den sonra kolon isimleri, local değişkenler, hesaplanmış ifadeler belirtebilirsiniz. Yani veritabanından çekilen kolon üzerinde herhangi bir işlem yaptırarak listelettirebilirsiniz. Örneğin veritabanımızda ürün fiyatları olsun. Fakat bizim ürün fiyatları yanında KDV’sine de ihtiyacımız oldu fakat bu bilgi veritabanında yok. Bu durumda Select ifadesi ile veriyi çekme aşamasında iken bunu da hesaplanmış ek bir kolon olarak çekebiliriz. Select ifadesinden sonra sadece kolon isimleri bulunmak zorunda değil.
Kolon isimlerini virgül (,) ile ayırmak zorundayız. Veriler listelenirkenkolon bilgileri verdiğimiz sırada gelir. Performans kazanmak için kolon kullanımına alışmalıyız. * kullandığımız takdirde tablodaki tüm alanlar ihtiyacımız olsun veya olmasın gelecektir. Bu

durum ise bize performans kaybı sağlayacaktır. Aşağıdaki örnekte employees tablosunda belirttiğimiz kolonları çekiyoruz. Bu tablo Northwind veritabanında bulunmaktadır.
ÖRN: SELECT employeeid, lastname, firstname, title
FROM employees

Where ifadesinin kullanımı :

Where ifadesi ile istediğimiz satırları alabiliriz. Where ifadesinden sonra belirttiğimiz kriterler sınırsız sayıda olabilir. Where ifadesinden sonra kriter olarak kullandığımız verinin tipi char, nchar, varchar, nvarchar, text, datetime ve smalldatetime ise tek tırnak (‘) kullanmalıyız. Where ifadesi ile normalde fazla sayıda gelen satır sayısını azaltmış oluruz. Where ifademiz tutarsız ise tüm satırlar yine gelecektir.

ÖRN : SELECT employeeid, lastname, firstname, title
FROM employees
WHERE employeeid=5


image001.jpg


Sonuç olarak tüm kayıtlarımız arasından sadece employeeid’si 5 olan veriler geldi.
Veri Filtreleme :
Zaman zaman ihtiyacınız olan verileri filtrelemek isteyebilirsiniz. Verilerinizi Where ifadesinden sonra kullanacağınız bazı koşullar ile filtreleyebilirsiniz. Bu koşullar şunlardır;

· Karşılaştırma operatörleri =, >, <, >=, <=, <>
· String karşılaştırmalar LIKE ve NOT LIKE
· Lojik operatörler AND, OR
· Lojik operatörler (Negatif) NOT
· Değer aralıkları BETWEEN ve NOT BETWEEN
· Değer listeleri IN ve NOT IN
· Bilinmeyen değerler IS NULL ve IS NOT NULL
Karşılaştırma operatörlerinin kullanımı :

Karşılaştırma operatörleri ile tablodaki bir veri ile belirlenmiş bir veri veya hesaplanmış veri karşılaştırılabilir. Fakat karşılaştırmak istediğiniz alan ve verinin tipleri aynı olmalıdır. Sayısal bir ifadeyi tarih ifadesi ile karşılaştıramazsınız. Burada kullanılan operatörler:


= Eşittir
> Büyüktür
< Küçüktür
>= Büyük veya eşittir
<= Küçük veya eşittir
<> Eşit değildir


NOT ifadesinin kullanımı tavsiye edilemez. Çünkü kullanıldığı takdirde tüm tablo değerlendirilir ve veri akışının yavaş olması problemi yaşanır.

ÖRN: SELECT lastname, city
FROM employees
WHERE country=’USA’



image002.jpg


Country alanı USA olanların listesi alındı. Dikkat edilirse country alanı string bir ifade olduğu için USA ifadesi tek tırnak içine alındı. Bu dikkat edilmesi gereken bir noktadır.

ÖRN :SELECT orderid, customerid
FROM orders
WHERE orderdate < ‘8/1/96’


image003.jpg


String Karşılaştırmaların Kullanımı :

Satırlarımızdaki verileri LIKE ifadesi ile bazı wildcard’ları kullanarak filtreleyebiliriz. LIKE ifadesini sadece char, nchar, varchar, nvarchar, binary, varbinary, smalldatetime ve datetime veri tiplerinde kullanabiliriz. Bu wilcardlar aşağıdaki gibidir:




% 0 veya daha fazla karakterli string
_ tek bir karakter
[] belirtilenler arasından tek bir karakter
[^] belirtilenler arasında olmayan tek bir karakter
Bu wildcarların LIKE ile kullanım örnekleri aşağıdaki gibidir;
LIKE ‘BR%’ BR ile başlayan tüm isimler
LIKE ‘Br%’ Br ile başlayan tüm isimler. Büyük küçük harf farkı
LIKE ‘%een’ een ile biten tüm isimler
LIKE ‘%en%’ en karakterlerini içeren tüm isimler
LIKE ‘_en’ en ile biten tüm 3 karakterli isimler
LIKE ‘[CK]%’ C veya K ile başlayan tüm isimler
LIKE ‘[S-V]ing’ Tüm 4 karakterli ve ilk karakteri S ile V arasında olan ve ing ile biten tüm isimler
LIKE ‘M[^c]%’M ile başlayan ve ikinci karakteri c olmayan tüm isimler


ÖRN : SELECT companyname
FROM customers
WHERE companyname LIKE ‘%Restaurant%’


image004.jpg


Lojik operatörler :

Birden fazla kriterleri bir arada kullanmamıza yardımcı olurlar. AND operatörü kullandığımız takdirde verdiğimiz tüm koşullara uyan kayıtlar gelir. OR operatörü kullandığımız takdirde verdiğimiz koşullardan birine uyanlar gelir. NOT kullandığımızda ise NOT dan sonraki koşulu sağlamayan kayıtlar gelir. Birden fazla koşul kullandığımız durumlarda parantezi koşulları gruplamak için kullanabiliriz. Böylece daha okunaklı olur ve gruplama işlemini yapabiliriz. SQL Server 2000 ilk önce NOT operatörüne arkasından AND ve OR operatörlerine bakar. Eğer tüm operatörler aynı grup içerisinde ise soldan

sağa doğru işlenir.
ÖRN : SELECT productid, productname, supplierid, unitprice
FROM products
WHERE (productname LIKE ‘T%’ OR productid=46)
AND (unitprice >16.00)

image005.jpg



Değer aralıkları :

BETWEEN ifadesini Where ile beraber kullanarak belli bir değer aralığındaki kayıtları getirebiliriz. Between ifadesi ile belirlenen aralık dışında kalan verileri almak için NOT BETWEEN kullanabiliriz. Between ifadesinde verilen aralığın bir bitiş noktası olmadır. Between ile verilen aralık (10 and 20) aslında AND ifadesi kullanımı ve büyük eşittir, küçük eşittirden oluşan bir koşuldur. Bunu kısaca between ifadesi ile yapmaktayız.

Örneğin (KOD BETWEEN 10 AND 20) aslında ((KOD>=10) AND (KOD<=20)) demektir.
ÖRN : SELECT productname, unitprice
FROM products
WHERE unitprice BETWEEN 10 AND 20

image006.jpg


Aslında aynı ifadeyi aşağıdaki şekilde de yazabilirdik.
SELECT productname, unitpriceFROM productsWHERE (unitprice>=10)AND (UnitPrice<=20)
Değer Listeleri :

Verilen bir liste içerisinde yer alan veya almayan değerleri içeren kayıtları getirir. Listede yer alanları aramak için IN, yer almayanları aramak için NOT IN ifadelerini kullanırız. Birden fazla koşulu OR ile de ayırabiliriz veya IN ile bir liste içerisinde arayabiliriz. İkisinide SQL aynı şekilde çözümler. Yani KOD IN [1,2] diyebildiğimiz gibi KOD=1 OR KOD=2 de diyebiliriz. NOT IN ifadesi daha öncede belirtildiği gibi veri akışını yavaşlatabilir.

ÖRN : SELECT companyname, country
FROM suppliers
WHERE country IN (‘Japan’,’Italy’)

image007.jpg



Bu ifadeyi şu şekilde de yazabilirdik.
SELECT companyname, countryFROM suppliersWHERE country=’Japan’ OR country=’Italy’
Bilinmeyen değerler :

Veri girişi sırasında tablodaki kolona veri girilmemiş olabilir ve default veri de atanmamış olabilir. Bu durumda bu kolondaki değer NULL’dur. Null değer 0 (nümerik) veya boşluk (string) ile aynı şey değildir. Bir alana değer girilmemiş kayıtları listelemek isin IS NULL ifadesini kullanabiliriz. Null ifadesini diğer koşullar ile kullanamayız. Yani >Null diye bir şey diyemeyiz. Kolonlar Null değer içerebilir tanımını tablo yaratırken yapabiliriz.


ÖRN :
SELECT companyname, fax
FROM suppliers
WHERE fax IS NULL


image008.jpg
 

gölge_adam

Katılımcı Üye
20 Şub 2007
517
8
TeXaS
SQL KOMUTLARI Temel Sql Komutları
Temel Sql Komutları
Temel Sql komutları iki bölümde incelendiğini daha önceki dökümanlarda bahsetmiştik.

DDL (Data definition language) : Veri tanımlama dili.
DML (Data manuplation language) : Veri düzenleme dili.

DDL komutları Create, Drop, Alter komutları ile başlar. ve obje tipi ve adı ile devam eder. bu komutlardan başka özel komutlarda mevcuttur. Örneğin bir kullanıcı yaratmak için:

Create User MyUserName .....

Bu şekilde komutlar girilir. Burada bir kaç temel komut incelenecektir.

Create Database :

Database yaratmak için kullanılır ek olarak database adı yazılır. Yaratılan database Select database komutu ile seçilir. Close Database komutu ile kapatılır. Bu komut informix'te kullanılır.

Create User:

Kullanıcı yaratmak için kullanılır. Formatı şu şekildedir.

Create User (UserName) identified by (Password) default tablespace (tablespacename);

(Username) kullanıcı adıdır. Zorunludur.

(Password) Kullanıcının şifresidir.

(Tablespacename) Default tablespace ifadesi sadece oracle için geçerlidir. tablespacename yerine oracle için user_data tablespace'i kullanılır.

Create user Myuser identified by Mypass default tablespace user_data;

Create table:

Tablo yaratmak için kullanılır.

Create table (TableName)
(
(FieldName) (FieldType) (Width) PrimaryKey,
(FieldName) (FieldType) (Width) Default (Default value),
(FieldName) (FieldType) (Width) not null,
(FieldName) (FieldType) (Width),
(FieldName) (FieldType),
Primary key ((PKeyField),(PKeyField))
) tablespace (TableSpaceName);

(TableName) : yaratılmak istenen tablo adı.

(FieldName) : kolon adı.

(FieldType) : Kolon tipi . Char, Varchar, Varchar2, Integer, Long, LongRaw, Raw, Smallint, byte, boolean tiplerinden biri.

(Width) : Alan genişliği.

(Default Value) : Default ifadesi ile beraber kullanılır. Eğer kayıt girilirken bu alana veri girilmemişse default value ne ise o değer kullanılır.

PrimaryKey : eğer bir kolon primary key olarak tanımlanacaksa sonuna primarykey yazılır.

Primary Key ( ) : Bu ifade eğer bir veya birden fazla kolon seçilecekse kolon adı yanına değil ayrı bir satır olarak yazılır. primary key komutunun yanında parantez içine alan adları yazılır.

(TablespaceName) : tablonun hangi tablespace içerisinde yer alacağı yazılır.



Örnek:

Create table personel
(
ID Integer,
Adi Varchar(20) not null,
Soyadi Varchar(20) not null,
Babaadi Varchar(20) not null,
Departman integer default 1,
Görev Varchar(20),
Primary Key (Adi, Soyadi, BabaAdi)
) tablespace user_data;

Create Index :

Indeks oluşturmak için bu kullanılır.

Create [ Foreign | unique ] index (indexname) on (tablename) ( (Tablefield), (TableField)....) tablespace (Tablespacename);

Foreign : foreign key yaratmak için kullanılır.

Unique : Index unique olacak manasında kullanılır. Yani bu indexe giren kolonlar asla tekrar etmeyecek yani her satırdan bir tane olacak manasında kullanılır.

(IndexName) : index adı
(tablename) : hangi tabloda yaratılacaksa o tablonun adı.
(TableField) : tablonun kolonunun adı.
(Tablespacename) : index'in oluşturulacağı yerin tablespace adı.
Create index Personel_Departman_Inx on personel (Departman);

Eğer primary key verilmemişse onun yerine

Create unique index Personel_Unq_inx on personel (Adi, Soyadi, BabaAdi);

Create Sequence:

Sequence denen objeler sistemde belli bir sıra veya uniqe'lik takip etmesi gereken işlemler için kullanılan bir objedir.

Create Sequence (SequenceName) Start with (StartValue) Increment by (Increment) Min Value (MinValue) Max Value (MaxValue) Cycle;

(SequenceName): Sequence objesinin adı
(StartValue): Başlangıç Değeri
(Increment): Arttırım değeri
(MinValue): En küçük değeri
(MaxValue): En fazla alabileceği değer
Cycle : Eğer max değere ulaşırsa oradan min değere inip tekrar arttırım değeri kadar yükselterek devam etmesini sağlar.

Basitçe bir sequence yaratmak için create sequence (sequencename) yeterlidir. Minimum değeri çok küçük bir rakam. Max çok büyük bir rakam arttırım değeri 1 başlangıç değeri de 0 olarak alınır. Oluşan sequence'in tipi Long Integer'dır. Bir sequence'den değer okumak için (sequence).nextval ifadesi kullanılır. Bu bir rakam döndürür. o anki değeri okumak istiyorsak (sequence).currentval kullanılır.

Örnek:

Create sequence personel_Id_sequence;

Create trigger :

Trigger yaratmak için kullanılır.

Create trigger (TriggerName) [ before | after ] [ Insert | Update | Delete ] on (TableName)

[For Each Row]

Begin

:

End;

Begin satırı ile End satırı arasında yapılacak işlemlerin PL/SQL dilinde komutları yazılır. Eğer Insert trigger'ı ise New ile yeni girilen kayıttaki bilgiler alınır. UPDATE ise NEW ile yeni OLD ile eski bilgiler alınır. Eğer Delete ise sadece OLD ile eski bilgiler alınabilir. (TableName) hangi tabloya bu trigger'in konacağıdır. (TriggerName) trigger'ın adıdır. For Each Row komutu bu trigger'in bütün satırlar için ayrı ayrı çalıştırılması gerektiğini gösterir.

Örnek:

Create Trigger Personel_Id_trigger before insert on personel

For each row

Begin

:new.Id:=Personel_Id_Sqn.nextval;

end;

Create Procedure ve Create Function:

Stored Procedure oluşturmak için kullanılır. Bu tipteki objelerin amacı veri tabanı ortamında komutların işletilerek işlemlerin hızlandırılması veya daha sağlıklı bir şekilde çözülmesidir. Örneğin sayfalarca komut yazarak yaptığınız işleri client tarafında basite indirgeyerek gereksiz Lock'lardan kurtulmak için strored procedure tipi objeler kullanılır. trigger'da olduğu gibi dil olarak PL/SQL kullanılır. Eğer geriye bir değer döndürülmek isteniyorsa Function kullanılabilir.


Create procedure (ProcedureName) ([IN|OUT|INOUT] (Param1) (ParamType1), [IN|OUT|INOUT] (Param2) (ParamType2) ....)
is

Begin
:
End;

yine begin ve end arasında PL/SQL ile yazılmış komutlar bulunmalıdır.
(ProcedureName): procedur'ün adıdır.
(IN/OUT/INOUT): Parametrenin procedure giren mi yoksa procedur'den çıkan bir değermi olduğunu gösterir.Eğer herhangi bir şey girilmemişse IN olarak kabul edilir.
(Param1,2): Giren parametrelerin isimleri
(ParamType1): gönderilen parametrenin tipini belirtir.


Örnek :

-- Aşağıdaki procedür verilen isimde kaç kişi olduğunu tespit etmek için kullanılır.
Create Function IsimSay (Isim Varchar)
is
Say Integer;
Begin
Select count(*) into say from personel where ad=isim;
Return Say;
End;

Nispeten biraz pascal diline benzemesine rağmen oldukça basit komutlardan oluşur. Bir prosedürün çağrılması ise şu şekilde olur.

(Call ? = IsimSay(?))

Yukarıdaki ifade VB 4.0 ile beraber gelen RDO objesinden stored procedure çağırmak için kullanılır. Eğer oracle ile beraber gelen Sql*Plus programından strored procedure veya function çağrılmak istenirse

Var Sonuc Integer
Execute :Sonuc:=IsimSay('Ahmet');
Print Sonuc

Böylece stored procedure ile işlem gerçekleştirilmiş olur.Eğer stored procedure veriler üzerinde işlem yapmıyorsa yani DDL komutu içermiyorsa o zaman stored procedure şu şekilde de çağrılabilir.

Select IsimSay('Ahmet') from Dual;

Dual oracle joker olarak kullanılan bir ifadedir. Herhangi bir kayıt döndürmez. Ancak belirtilen şekilde çağrıldığında procedure çalıştırılıp sonuç döndürülür.

Bunun dışında delphi'de stored procedure çalıştırmak için hazır objeler mevcuttur.

VB 5.0 ise stored procedure'leri listeleyip sizin bunları programınızın bir parçası gibi görmenizi sağlayan objeleri getirmiştir. Ayrıca RDO üzerinden üstte verildiği üzere fonksiyonu yazdığınızda parametreleri rdo üzerinden tanımlayarak sonucu alabilirsiniz. Bu işlem için RDO'nun helplerine bakabilirsiniz.

PL/SQL komutları esas olarak DML ve DDL komutlarının biraz daha farklılaştırılmasıyla ve ek komutlar ve hata kontrolleri eklenmesi ile oluşturulmuştur. Basit şekilde pascal'a benzemekle beraber oldukça basittir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.