Merhaba,
Bu yazımda stored procedure hakkında bilgiler vereceğim. Stored Procedureler SQL’de bize çok kolaylık sağlayan , sistemin yorulmasını en aza düşüren , bir kere derlendikten sonra defalarca kullanılabilen veritabanı için olmazsa olmaz nesnelerdir. Büyük projelerde mutlaka ihtiyaç duyduğumuz objelerdir. Kısaca SP şeklinde de kullanılır. Programlama dilleri ile DML dillerini birbirinden ayrı tutar.
- Çok hızlı çalışırlar.
- Bir kere derlendikten sonra defalarca kullanılabilirler. Uygulama katmanında eğer SQL kodu olsaydı her çağrımda tekrar tekrar derlenecekti bu da bizim network sistemimizin yorulmasına neden olacaktı . SP’ler bu durumum önüne geçer. (En önemli özellik)
- SP’ler de programlama dillerinde kullandığımız döngüleride (for,if,while) kullanabiliriz.
- Güvenlik açısından da sadece giriş ve çıkış parametrelerini uygulama katmanından kullandığı için daha güvenlidir.
Genellikle 4 çeşidi bulunmaktadır.
Sistem Stored Procedure : Master veritabanında tutulan kullanımında sp_ prefixi kullanılan stored procedure lardır. Veritabanı üzerinde sistemle alakalı yönetimsel işlerde kullanılırlar.
Kullanıcı Tabanlı Stored Procedure : Uygulamalarımız için kullandığımız sp lerdir.Bu sp leri çok rahat oluşturup silebilir ve değiştirebiliriz.
Extended Stored Procedure : Genelde .dll şeklinde derlenmiş olup Database Server ın işlevselliğini artıran bir çeşit stored procedure lerdir. Yalnız Master veritabanına eklenirler.
CLR Stored Procedure : CLR ortamında herhangi bir dili kullanarak da stored procedure ler geliştirilen bir tür Stored procedure çeşididir.
Şimdi örnek INSERT , UPDATE , DELETE ve SELECT SP’leri yazalım.
Genellikle SP kalıbı şu şekildedir ;
CREATE OR REPLACE PROCEDURE prosedürAdı ( degiskenler ) Ek Bilgiler BEGIN yazılacak procedure END prosedürAdı;
*REPLACE kavramı SP’nin sonradan değiştirebilir olması için kullanılır.
– İlk olarak bir çalışan tablosu oluşturalım.
create table TBL_EMPLOYEE ( EMPLOYEEID NUMBER, NAME NVARCHAR2(20), SURNAME NVARCHAR2(20), AGE NUMBER, JOB NVARCHAR2(40), SALARY NUMBER )

– Oluşturduğumuz tablomuz için INSERT SP’mizi yazalım.
CREATE OR REPLACE PROCEDURE TBL_EMPLOYEE_EKLE
(
p_EmployeeId out TBL_EMPLOYEE.EMPLOYEEID%TYPE -- "out" dedik veriyi Sequenceden alacağız.
p_Name in TBL_EMPLOYEE.NAME%TYPE; -- belirtilen tablonun veri tipinde olsun dedik.
p_Surname in TBL_EMPLOYEE.SURNAME%TYPE;
p_Age in TBL_EMPLOYEE.AGE%TYPE;
p_Job in TBL_EMPLOYEE.JOB%TYPE;
p_Salary in TBL_EMPLOYEE.SALARY%TYPE;
) IS
v_EmployeeId TBL_EMPLOYEE.EMPLOYEEID%TYPE;
BEGIN
SELECT TBL_EMPLOYEE.SEQ.NEXTVAL -- Sequence kullanımından bahsetmiştik onu kullandık.
INTO v_EmployeeId
FROM dual;
INSERT INTO TBL_EMPLOYEE E
(
E.EMPLOYEEID,
E.NAME,
E.SURNAME,
E.AGE,
E.JOB,
E.SALARY
)
VALUES
(
v_EmployeeId,
p_Name,
p_Surname,
p_Age,
p_Job,
p_Salary
)
p_EmployeeId := v_EmployeeId;
END TBL_EMPLOYEE_EKLE;
– Oluşturduğumuz tablomuz için UPDATE SP’mizi yazalım.
CREATE OR REPLACE PROCEDURE TBL_EMPLOYEE_GUNCELLE
(
p_EmployeeId in TBL_EMPLOYEE.EMPLOYEEID%TYPE
p_Name in TBL_EMPLOYEE.NAME%TYPE;
p_Surname in TBL_EMPLOYEE.SURNAME%TYPE;
p_Age in TBL_EMPLOYEE.AGE%TYPE;
p_Job in TBL_EMPLOYEE.JOB%TYPE;
p_Salary in TBL_EMPLOYEE.SALARY%TYPE;
) AS
BEGIN
UPDATE TBL_EMPLOYEE E
SET E.NAME = p_Name,
E.SURNAME = p_Surname,
E.AGE = p_Age,
E.JOB = p_Job,
E.SALARY = p_Salary
WHERE E.EMPLOYEEID = p_EmployeeId;
END TBL_EMPLOYEE_GUNCELLE;
– Oluşturduğumuz tablomuz için DELETE SP’mizi yazalım.
CREATE OR REPLACE PROCEDURE TBL_EMPLOYEE_SIL
(
p_EmployeeId in TBL_EMPLOYEE.EMPLOYEEID%TYPE
) AS
BEGIN
DELETE FROM TBL_EMPLOYEE E
WHERE E.EMPLOYEEID = p_EmployeeId;
END TBL_EMPLOYEE_SIL;
– Oluşturduğumuz tablomuz için SELECT SP’mizi yazalım.
CREATE OR REPLACE PROCEDURE TBL_EMPLOYEE_GOSTER
(
p_EmployeeId in TBL_EMPLOYEE.EMPLOYEEID%TYPE --tek tek numara bazlı çekmek için
RC1 in out SYS_REFCURSOR -- hepsini çekebilmek için
) AS
BEGIN
IF p_EmployeeId > 0 THEN
OPEN RC1 FOR
SELECT E.EMPLOYEEID,
E.NAME,
E.SURNAME,
E.AGE,
E.JOB,
E.SALARY
FROM TBL_EMPLOYEE E
WHERE E.EMPLOYEEID = p_EmployeeId;
ELSE
OPEN RC1 FOR
SELECT E.EMPLOYEEID,
E.NAME,
E.SURNAME,
E.AGE,
E.JOB,
E.SALARY
FROM TBL_EMPLOYEE E
ORDER BY E.EMPLOYEEID ASC; -- hepsini gösterirken küçükten büyüğe sırala dedik.
END IF;
END TBL_EMPLOYEE_GOSTER;
STORED PROCEDURE’ler hakkında aktaracaklarım bu kadar umarım yararlı olmuştur.
İyi çalışmalar.
Her Tür Bilginin Adresi Bilgiye ulaşılan en kısa yol…