PL/SQL Programlama — 7 — Packages (Paketler)

Gökhan YAVAŞ
gokhanyavas
Published in
2 min readJan 18, 2017

Bu bölümde, paketler konusunu inceleyeceğiz. Paketler, mantıksal olarak ilişkili PL/SQL tipleri, alt programları gruplayan şema nesneleridir. Paketler bize modüllerlik, kolay uygulama dizaynı, iyi performans avantajı sağlar. Paketler 2 kısımdan oluşur:

  1. Body (Gövde)
  2. Specification (Belirtme-Tanımlama)

Gövde bölümünde imleç ve alt programlar tanımlanır. Spec bölümündeyse, değişkenler, sabitler, aykırı durumlar, imleçler ve alt programlar için kulanılabilir. Sistemde bulunan paketlere örnek olarak DBMS_OUTPUT paketi verilebilir.

Paket Tanımlamak

Paket oluşturmak için CREATE PACKAGE deyimini kullanırız. Söz dizimi aşağıdaki gibidir:

CREATE [OR REPLACE] PACKAGE package_name
{IS | AS}
package_specification
END package_name;

package specification kısmında; prosedürler, fonksiyonlar, tipler, nesneler kullanılır. Belirtiğimiz sentaks ile ilgili örneğimiz :

CREATE OR REPLACE PACKAGE personel AS
-- calisanin tam adi
FUNCTION get_fullname(n_emp_id NUMBER)
RETURN VARCHAR2;
-- calisanin maasi
FUNCTION get_salary(n_emp_id NUMBER)
RETURN NUMBER;
END personel;

Bu örnek, Specification kısıma örnektir. Body için aşağıdaki örneği inceleyiniz:

CREATE PACKAGE BODY product_package AS
FUNCTION get_products_ref_cursor
RETURN t_ref_cursor IS
v_products_ref_cursor t_ref_cursor;
BEGIN
OPEN v_products_ref_cursor FOR
SELECT product_id, name, price
FROM products;
RETURN v_products_ref_cursor;
END get_products_ref_cursor;
PROCEDURE update_product_price (
p_product_id IN products.product_id%TYPE,
p_factor IN NUMBER
) AS
v_product_count INTEGER;
BEGIN
SELECT COUNT(*)
INTO v_product_count
FROM products
WHERE product_id = p_product_id;
IF v_product_count = 1 THEN
UPDATE products
SET price = price * p_factor
WHERE product_id = p_product_id;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END update_product_price;
END product_package;
/
Paketi Çalıştırmak:
Fonksiyon ve prosedürlerde olduğu paketleri çalıştırmak/çağırmak aynıdır.
SELECT personel.get_fullname
FROM dual;
Burada paketin adı yazılır ardından . (nokta) koyulduktan sonra paket içinde kullanmak istediğiniz fonksiyon çağırılarak çalıştırılır.
Paketi Silmek:
Sistemdeki bir paketi silmek istersek DROP PACKAGE deyimi kullanılır. Söz dizimi aşağıdaki gibidir:
DROP PACKAGE paketadiKısaca paketler bu şekilde...

--

--