Oracle PL/SQL Paketi: Tür, Teknik Özellikler, Gövde [Örnek]
Paket İçeriğinde Neler Var? Oracle?
PL/SQL paketi, ilgili bir alt programın (prosedür/fonksiyon) tek bir öğeye mantıksal olarak gruplandırılmasıdır. Bir Paket derlenir ve daha sonra kullanılabilen bir veritabanı nesnesi olarak saklanır.
Paketlerin Bileşenleri
PL/SQL paketinin iki bileşeni vardır.
- Paket özellikleri
- Paket Gövdesi
Paket özellikleri
Paket spesifikasyonu tüm kamuoyunun beyanından oluşur değişkenler, imleçler, nesneler, prosedürler, işlevler ve istisna.
Aşağıda Paket spesifikasyonunun birkaç özelliği bulunmaktadır.
- Spesifikasyonda belirtilen tüm öğelere paketin dışından erişilebilir. Bu tür unsurlara kamusal unsur adı verilmektedir.
- Paket spesifikasyonu bağımsız bir öğedir, yani paket gövdesi olmadan tek başına var olabilir.
- Bir paket referans verdiğinde, söz konusu oturum için paketin bir örneği oluşturulur.
- Bir oturum için örnek oluşturulduktan sonra o örnekte başlatılan tüm paket öğeleri oturumun sonuna kadar geçerlidir.
Sözdizimi
CREATE [OR REPLACE] PACKAGE <package_name> IS <sub_program and public element declaration> . . END <package name>
Yukarıdaki sözdizimi paket spesifikasyonunun oluşturulmasını gösterir.
Paket Gövdesi
Paket spesifikasyonunda mevcut olan tüm unsurların tanımından oluşur. Ayrıca spesifikasyonda belirtilmeyen öğelerin tanımı da olabilir, bu öğelere özel öğeler adı verilir ve yalnızca paketin içinden çağrılabilir.
Aşağıda bir paket gövdesinin özellikleri verilmiştir.
- Tüm alt programların tanımlarını içermelidir/imleçleri Şartnamede beyan edilenler.
- Ayrıca spesifikasyonda belirtilmeyen daha fazla alt programa veya başka öğelere de sahip olabilir. Bunlara özel unsurlar denir.
- Güvenilir bir nesnedir ve paket spesifikasyonuna bağlıdır.
- Spesifikasyon derlendiğinde paket gövdesinin durumu 'Geçersiz' olur. Bu nedenle spesifikasyon derlendikten sonra her defasında yeniden derlenmesi gerekmektedir.
- Özel öğeler paket gövdesinde kullanılmadan önce ilk olarak tanımlanmalıdır.
- Paketin ilk kısmı global bildirim kısmıdır. Buna değişkenler, imleçler ve paketin tamamı tarafından görülebilen özel öğeler (ileri bildirim) dahildir.
- Paketin son kısmı, oturumda bir pakete ilk kez başvurulduğunda bir kez çalıştırılan Paket başlatma kısmıdır.
Sözdizimi:
CREATE [OR REPLACE] PACKAGE BODY <package_name> IS <global_declaration part> <Private element definition> <sub_program and public element definition> . <Package Initialization> END <package_name>
- Yukarıdaki sözdizimi paket gövdesinin oluşturulmasını gösterir.
Şimdi programdaki paket elemanlarına nasıl başvurulacağını göreceğiz.
Referans Paket Öğeleri
Öğeler pakette bildirilip tanımlandıktan sonra, bunları kullanmak için öğelere başvurmamız gerekir.
Paketin tüm genel öğelerine, paket adının ve ardından noktayla ayrılmış öğe adının çağrılması yoluyla başvurulabilir; örneğin ' . '.
Paketin genel değişkeni de aynı şekilde onlardan değer atamak ve almak için kullanılabilir; örneğin ' . '.
PL/SQL'de Paket Oluştur
PL/SQL'de bir oturumda bir pakete başvurulduğunda/çağrıldığında o paket için yeni bir örnek oluşturulacaktır.
Oracle 'Paket Başlatma' yoluyla bu örnek oluşturma sırasında paket öğelerini başlatmak veya herhangi bir etkinliği gerçekleştirmek için bir olanak sağlar.
Bu, tüm paket elemanları tanımlandıktan sonra paket gövdesine yazılan bir yürütme bloğundan başka bir şey değildir. Bu blok, oturumda bir pakete ilk kez başvurulduğunda yürütülecektir.
Sözdizimi
CREATE [OR REPLACE] PACKAGE BODY <package_name> IS <Private element definition> <sub_program and public element definition> . BEGINE <Package Initialization> END <package_name>
- Yukarıdaki sözdizimi, paket gövdesindeki paket başlatmanın tanımını gösterir.
İleri Bildirimler
Paket içerisindeki ileri bildirim/referans, private elemanları ayrı ayrı bildirmek ve paket gövdesinin sonraki kısmında tanımlamaktan başka bir şey değildir.
Özel öğelere yalnızca paket gövdesinde zaten bildirilmişse başvurulabilir. Bu nedenle ileri bildirim kullanılmaktadır. Ancak kullanımı oldukça alışılmadık bir durumdur çünkü çoğu zaman özel öğeler paket gövdesinin ilk bölümünde bildirilir ve tanımlanır.
İleri bildirim, tarafından sağlanan bir seçenektir. Oracle, zorunlu değildir ve kullanmak veya kullanmamak programcının ihtiyacına bağlıdır.
Sözdizimi:
CREATE [OR REPLACE] PACKAGE BODY <package_name> IS <Private element declaration> . . . <Public element definition that refer the above private element> . . <Private element definition> . BEGIN <package_initialization code>; END <package_name>
Yukarıdaki sözdizimi ileri bildirimi gösterir. Özel öğeler paketin ileri kısmında ayrı ayrı bildirilir ve sonraki kısımda tanımlanmıştır.
Paket İçinde İmleç Kullanımı
Diğer Elementlerin aksine paket içindeki imleçleri kullanırken dikkatli olmak gerekir.
İmleç paket spesifikasyonunda veya paket gövdesinin genel bölümünde tanımlanmışsa, imleç bir kez açıldığında oturumun sonuna kadar varlığını sürdürür.
Bu nedenle, imlecin durumunu doğrulamak için ona başvurmadan önce her zaman '%ISOPEN' imleç öznitelikleri kullanılmalıdır.
fazla yükleme
Aşırı yükleme, aynı isimde birçok alt programa sahip olma kavramıdır. Bu alt programlar, bir dizi parametre veya parametre türü veya dönüş türü bakımından birbirinden farklı olacaktır; yani aynı adı taşıyan ancak farklı sayıda parametreye sahip alt program, farklı parametre türü veya farklı yeniden tür, aşırı yükleme olarak kabul edilir.
Bu, birçok alt programın aynı görevi yapması gerektiğinde kullanışlıdır, ancak her birinin çağrılma şekli farklı olmalıdır. Bu durumda alt program adı herkes için aynı tutulacak ve parametreler çağıran ifadeye göre değiştirilecektir.
Örnek 1: Bu örnekte 'emp' tablosundaki çalışan bilgilerinin değerlerini alıp ayarlamak için bir paket oluşturacağız. get_record işlevi, verilen çalışan numarası için kayıt türü çıktısını döndürecek ve set_record prosedürü, kayıt türü kaydını emp tablosuna ekleyecektir.
) 1 Adım Paket Spesifikasyonu Oluşturma
CREATE OR REPLACE PACKAGE guru99_get_set IS PROCEDURE set_record (p_emp_rec IN emp%ROWTYPE); FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE; END guru99_get_set: /
Çıktı:
Package created
Kod Açıklama
- Kod satırı 1-5: Guru99_get_set için paket spesifikasyonunun tek prosedür ve tek işlevle oluşturulması. Bu ikisi artık bu paketin ortak unsurlarıdır.
) 2 Adım Paket, tüm prosedür ve fonksiyonların gerçek tanımının tanımlanacağı Paket gövdesini içerir. Bu adımda Paket Gövdesi oluşturulur.
CREATE OR REPLACE PACKAGE BODY guru99_get_set IS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE) IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO emp VALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager); COMMIT; END set_record; FUNCTION get_record(p_emp_no IN NUMBER) RETURN emp%ROWTYPE IS l_emp_rec emp%ROWTYPE; BEGIN SELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_no RETURN l_emp_rec; END get_record; BEGUN dbms_output.put_line(‘Control is now executing the package initialization part'); END guru99_get_set: /
Çıktı:
Package body created
Kod Açıklama
- Kod satırı 7: Paket gövdesinin oluşturulması.
- Kod satırı 9-16: Belirtimde bildirilen 'set_record' öğesinin tanımlanması. Bu, PL/SQL'de bağımsız prosedürü tanımlamakla aynıdır.
- Kod satırı 17-24: 'get_record' öğesini tanımlama. Bağımsız işlevi tanımlamakla aynıdır.
- Kod satırı 25-26: Paket başlatma kısmının tanımlanması.
) 3 Adım Yukarıda oluşturulan pakete başvurarak kayıtları eklemek ve görüntülemek için anonim bir blok oluşturmak.
DECLARE l_emp_rec emp%ROWTYPE; l_get_rec emp%ROWTYPE; BEGIN dbms output.put line(‘Insert new record for employee 1004'); l_emp_rec.emp_no:=l004; l_emp_rec.emp_name:='CCC'; l_emp_rec.salary~20000; l_emp_rec.manager:=’BBB’; guru99_get_set.set_record(1_emp_rec); dbms_output.put_line(‘Record inserted'); dbms output.put line(‘Calling get function to display the inserted record'): l_get_rec:=guru99_get_set.get_record(1004); dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name); dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no); dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary'); dbms output.put line(‘Employee manager:‘||1_get_rec.manager); END: /
Çıktı:
Insert new record for employee 1004 Control is now executing the package initialization part Record inserted Calling get function to display the inserted record Employee name: CCC Employee number: 1004 Employee salary: 20000 Employee manager: BBB
Kod Açıklaması:
- Kod satırı 34-37: Paketin 'set_record' öğesini çağırmak için kayıt türü değişkenine ilişkin verileri anonim bir blokta doldurmak.
- Kod satırı 38: guru99_get_set paketinin 'set_record'una çağrı yapıldı. Artık paket başlatıldı ve oturumun sonuna kadar devam edecek.
- Paket başlatma kısmı, pakete yapılan ilk çağrı olduğundan yürütülür.
- 'set_record' öğesi tarafından tabloya eklenen kayıt.
- Kod satırı 41: Eklenen çalışanın ayrıntılarını görüntülemek için 'get_record' elemanını çağırıyoruz.
- Pakete 'get_record' çağrısı sırasında pakete ikinci kez başvurulur. Ancak paket bu oturumda zaten başlatıldığından bu kez başlatma kısmı yürütülmez.
- Kod satırı 42-45: Çalışan bilgilerinin yazdırılması.
Paketlerde Bağımlılık
Paket, ilişkili şeylerin mantıksal gruplaması olduğundan, bazı bağımlılıkları vardır. Dikkat edilmesi gereken bağımlılıklar şunlardır.
- Belirtim bağımsız bir nesnedir.
- Paket gövdesi spesifikasyona bağlıdır.
- Paket gövdesi ayrı ayrı derlenebilir. Spesifikasyon derlendiğinde, geçersiz hale geleceği için gövdenin yeniden derlenmesi gerekir.
- Paket gövdesindeki özel bir öğeye bağımlı olan alt program, yalnızca özel öğe bildiriminden sonra tanımlanmalıdır.
- Belirtimde ve gövdede atıfta bulunulan veritabanı nesnelerinin, paketin derlenmesi sırasında geçerli durumda olması gerekir.
paket bilgisi
Paket bilgileri oluşturulduktan sonra, paket kaynağı, alt program ayrıntıları ve aşırı yükleme ayrıntıları gibi paket bilgileri şurada kullanılabilir: Oracle veri tanımlama tabloları.
Aşağıdaki tabloda veri tanımlama tablosu ve tabloda yer alan paket bilgileri verilmektedir.
Tablo ismi | Açıklama | Sorgu |
---|---|---|
ALL_OBJECT | Paketin object_id, creation_date, last_ddl_time gibi ayrıntılarını verir. Tüm kullanıcılar tarafından oluşturulan nesneleri içerir. | SELECT * FROM all_objects burada nesne_adı =' ' |
USER_OBJECT | Paketin object_id, creation_date, last_ddl_time gibi ayrıntılarını verir. Mevcut kullanıcı tarafından oluşturulan nesneleri içerir. | SELECT * FROM user_objects burada nesne_adı =' ' |
ALL_SOURCE | Tüm kullanıcılar tarafından oluşturulan nesnelerin kaynağını verir. | SELECT * FROM all_source burada isim=' ' |
USER_SOURCE | Geçerli kullanıcı tarafından oluşturulan nesnelerin kaynağını verir. | SELECT * FROM user_source burada ad=' ' |
ALL_PROSEDÜRLER | Tüm kullanıcılar tarafından oluşturulan alt program detaylarını (object_id, aşırı yükleme detayları, vb.) verir. | Tüm prosedürlerden * SEÇİN Nerede nesne_adı=' ' |
USER_PROCEDURES | Mevcut kullanıcı tarafından oluşturulan alt program detaylarını (object_id, aşırı yükleme detayları, vs.) verir. | user_procedures'tan * SEÇİN Nerede nesne_adı=' ' |
UTL DOSYASI – Genel Bakış
UTL Dosyası, tarafından sağlanan ayrı bir yardımcı program paketidir. Oracle özel görevleri gerçekleştirmek için. Bu esas olarak PL/SQL paketlerinden veya alt programlarından işletim sistemi dosyalarını okumak ve yazmak için kullanılır. Bilgiyi koymak ve dosyalardan bilgi almak için ayrı işlevlere sahiptir. Ayrıca yerel karakter setinde okuma/yazmaya da olanak tanır.
Programcı bunu herhangi bir türdeki işletim sistemi dosyalarını yazmak için kullanabilir ve dosya doğrudan veritabanı sunucusuna yazılacaktır. İsim ve dizin yolu yazarken belirtilecektir.
ÖZET
Artık paketleri öğrendik. PL / SQLve artık aşağıdaki konularda çalışabilir durumda olmalısınız.
- PL/SQL paketleri ve Bileşenleri
- Paketlerin özellikleri
- Paket öğelerini yönlendirme ve aşırı yükleme
- Paketlerdeki bağımlılıkları yönetme
- Paket bilgilerini görüntüleme
- UTL Dosyası Nedir?