Oracle'da Paket nedir?
PL / SQL paketi, ilgili bir alt programın (prosedür / fonksiyon) tek bir eleman halinde mantıksal olarak gruplandırılmasıdır. Bir Paket, daha sonra kullanılabilecek bir veritabanı nesnesi olarak derlenir ve saklanır.
Bu eğitimde öğreneceksiniz-
- Paket Bileşenleri
- Paket Özellikleri
- Paket Gövdesi
- Paket Öğelerine Başvurma
- PL / SQL'de Paket Oluşturun
- İleriye Dönük Beyanlar
- Pakette İmleç Kullanımı
- Aşırı yükleme
- Paketlerde Bağımlılık
- paket bilgisi
- UTL DOSYASI - Genel Bakış
Paket Bileşenleri
PL / SQL paketinin iki bileşeni vardır.
- Paket Özellikleri
- Paket Gövdesi
Paket Özellikleri
Paket belirtimi, tüm genel değişkenlerin, imleçlerin, nesnelerin, prosedürlerin, işlevlerin ve istisnanın bir bildiriminden oluşur.
Aşağıda, Paket spesifikasyonunun birkaç özelliği bulunmaktadır.
- Spesifikasyonda belirtilen tüm unsurlara paketin dışından erişilebilir. Bu tür unsurlar kamusal unsur olarak bilinir.
- Paket spesifikasyonu, tek başına paket gövdesi olmadan var olabileceği anlamına gelen bağımsız bir unsurdur.
- Bir paket başvurduğunda, o belirli 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] PACKAGEIS … END
Yukarıdaki sözdizimi, paket spesifikasyonunun oluşturulmasını gösterir.
Paket Gövdesi
Paket spesifikasyonunda bulunan tüm unsurların tanımından oluşur. Ayrıca belirtimde belirtilmeyen elemanların bir tanımına sahip olabilir, bu elemanlara özel elemanlar denir ve sadece paketin içinden çağrılabilir.
Aşağıda bir paket gövdesinin özellikleri bulunmaktadır.
- Spesifikasyonda beyan edilmiş olan tüm alt programlar / imleçler için tanımları içermelidir.
- Ayrıca, spesifikasyonda belirtilmeyen daha fazla alt programa veya diğer öğelere sahip olabilir. Bunlara özel öğeler denir.
- Güvenilir bir nesnedir ve paketin özelliklerine bağlıdır.
- Paket gövdesinin durumu, spesifikasyon her derlendiğinde "Geçersiz" olur. Bu nedenle, spesifikasyonun derlenmesinden sonra her seferinde yeniden derlenmesi gerekir.
- Özel öğeler, paket gövdesinde kullanılmadan önce tanımlanmalıdır.
- Paketin ilk kısmı, global bildirim kısmıdır. Bu, tüm paket tarafından görülebilen değişkenleri, imleçleri ve özel öğeleri (ileri bildirim) içerir.
- Paketin son bölümü, oturumda bir pakete ilk kez başvurulduğunda bir kez çalıştırılan Paket başlatma bölümüdür.
Sözdizimi:
CREATE [OR REPLACE] PACKAGE BODYIS . END
- Yukarıdaki sözdizimi, paket gövdesinin oluşturulmasını gösterir.
Şimdi programdaki paket öğelerine nasıl atıfta bulunacağımızı göreceğiz.
Paket Öğelerine Başvurma
Öğeler pakette bildirilip tanımlandıktan sonra, bunları kullanmak için öğelere başvurmamız gerekir.
Paketin tüm genel öğeleri, paket adı ve ardından nokta ile ayrılmış öğe adı (ör. '
Paketin genel değişkeni, bunlardan değerleri atamak ve almak için aynı şekilde kullanılabilir, yani '
PL / SQL'de Paket Oluşturun
PL / SQL'de, bir oturumda bir pakete başvurulduğunda / çağrıldığında, o paket için yeni bir örnek oluşturulur.
Oracle, 'Paket Başlatma' yoluyla bu örnek oluşturma sırasında paket öğelerini başlatmak veya herhangi bir faaliyeti gerçekleştirmek için bir tesis sağlar.
Bu, tüm paket öğelerini tanımladıktan sonra paket gövdesine yazılan bir yürütme bloğundan başka bir şey değildir. Bu blok, oturumda bir paket ilk kez yönlendirildiğinde yürütülecektir.
Sözdizimi
CREATE [OR REPLACE] PACKAGE BODYIS .BEGINE END
- Yukarıdaki sözdizimi, paket gövdesindeki paket başlatma tanımını gösterir.
İleriye Dönük Beyanlar
Paketteki ileri beyan / referans, özel unsurları ayrı ayrı beyan etmekten ve onu paket gövdesinin sonraki bölümünde tanımlamaktan başka bir şey değildir.
Özel öğeler, yalnızca paket gövdesinde zaten beyan edilmişse başvurulabilir. Bu nedenle forward beyanı kullanılır. Ancak kullanımı oldukça sıra dışıdır çünkü çoğu zaman özel öğeler paket gövdesinin ilk bölümünde beyan edilir ve tanımlanır.
İleri beyan, Oracle tarafından sağlanan bir seçenektir, zorunlu değildir ve kullanılması ve kullanılmaması programcının ihtiyacına bağlıdır.
Sözdizimi:
CREATE [OR REPLACE] PACKAGE BODYIS … … .BEGIN ;END
Yukarıdaki sözdizimi ileri bildirimi gösterir. Özel unsurlar paketin ileri kısmında ayrı ayrı beyan edilmiş ve sonraki kısımda tanımlanmıştır.
Pakette İmleç Kullanımı
Diğer Elementlerin aksine, paketin içinde imleçler kullanılırken dikkatli olunması gerekir.
İmleç, paket spesifikasyonunda veya paket gövdesinin genel bölümünde tanımlanmışsa, imleç açıldıktan sonra oturumun sonuna kadar devam edecektir.
Bu nedenle, imlecin durumuna başvurmadan önce imlecin durumunu doğrulamak için her zaman '% ISOPEN' imleç öznitelikleri kullanılmalıdır.
Aşırı yükleme
Aşırı yükleme, aynı ada sahip birçok alt programa sahip olma kavramıdır. Bu alt programlar, bir dizi parametre veya parametre türü veya dönüş türü ile birbirinden farklılık gösterecektir, yani aynı ada sahip ancak farklı sayıda parametreye, farklı türde parametrelere veya farklı yeniden tiplere sahip alt program 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 birini çağırmanın yolu farklı olmalıdır. Bu durumda, alt program adı tümü için aynı tutulacak ve parametreler çağıran ifadeye göre değiştirilecektir.
Örnek 1 : Bu örnekte, 'emp' tablosunda çalışan bilgilerinin değerlerini almak ve ayarlamak için bir paket oluşturacağız. Get_record işlevi, belirtilen çalışan numarası için kayıt türü çıktısını döndürecektir ve set_record prosedürü, kayıt türü kaydını emp tablosuna ekleyecektir.
Adım 1) Paket Özelliklerinin Oluşturulması
CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE 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 : Bir prosedür ve bir işlevle guru99_get_set için paket belirtiminin oluşturulması. Bu ikisi artık bu paketin genel unsurlarıdır.
Adım 2) Paket, tüm prosedürlerin ve işlevlerin 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_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(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%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN 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övdesini oluşturma.
- Kod satırı 9-16 : Spesifikasyonda bildirilen 'set_record' öğesini tanımlama. 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 bölümünü tanımlama.
Adım 3) Yukarıda oluşturulan pakete başvurarak kayıtları eklemek ve görüntülemek için anonim bir blok oluşturma.
DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms 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 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB
Kod Açıklaması:
- Kod satırı 34-37: Paketin 'set_record' öğesini çağırmak için anonim bir blokta kayıt türü değişkeni için verilerin doldurulması.
- Kod satırı 38: guru99_get_set paketinin 'set_record'una çağrı yapıldı. Artık paket somutlaştırılmıştır ve oturumun sonuna kadar devam edecektir.
- Paket başlatma kısmı, bu pakete yapılan ilk çağrı olduğu için 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' öğesini çağırma.
- Paket, pakete 'get_record' çağrısı sırasında ikinci kez başvurulur. Ancak, paket bu oturumda zaten başlatıldığından, başlatma kısmı bu sefer yürütülmez.
- Kod satırı 42-45: Çalışan ayrıntılarının yazdırılması .
Paketlerde Bağımlılık
Paket, ilgili şeylerin mantıksal gruplaması olduğundan, bazı bağımlılıkları vardır. Dikkat edilmesi gereken bağımlılık aşağıdadır.
- Bir Spesifikasyon bağımsız bir nesnedir.
- Bir Paket gövdesi teknik özelliklere bağlıdır.
- Paket gövdesi ayrı ayrı derlenebilir. Spesifikasyon her 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.
- Spesifikasyonda ve gövdede atıfta bulunulan veritabanı nesnelerinin, paket derleme 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ük ayrıntıları gibi paket bilgileri Oracle veri tanımlama tablolarında kullanılabilir.
Aşağıdaki tablo veri tanımlama tablosunu ve tabloda bulunan paket bilgilerini vermektedir.
Tablo ismi | Açıklama | Sorgu |
ALL_OBJECT | Paketin object_id, create_date, last_ddl_time vb. Detaylarını verir. Tüm kullanıcılar tarafından oluşturulan nesneleri içerir. | Object_name = '
|
USER_OBJECT | Object_id, create_date, last_ddl_time, vb. Gibi paketin ayrıntılarını verir. Mevcut kullanıcı tarafından oluşturulan nesneleri içerir. | SEÇİN * user_objects, burada object_name = '
|
ALL_SOURCE | Tüm kullanıcılar tarafından oluşturulan nesnelerin kaynağını verir. | SEÇİN * all_source'tan ad = '
|
USER_SOURCE | Mevcut kullanıcı tarafından oluşturulan nesnelerin kaynağını verir. | SELECT * FROM user_source burada name = '
|
ALL_PROCEDURES | Tüm kullanıcılar tarafından oluşturulan nesne_kimliği, aşırı yük ayrıntıları vb. Gibi alt program ayrıntılarını verir. | Tüm prosedürlerden * SEÇİN Burada object_name = '
|
USER_PROCEDURES | Mevcut kullanıcı tarafından oluşturulan nesne_kimliği, aşırı yük ayrıntıları vb. Gibi alt program ayrıntılarını verir. | SEÇİN * user_procedures 'dan object_name ='
|
UTL DOSYASI - Genel Bakış
UTL Dosyası, özel görevleri gerçekleştirmek için Oracle tarafından sağlanan ayrı bir yardımcı program paketidir. Bu, esas olarak PL / SQL paketlerinden veya alt programlardan işletim sistemi dosyalarını okumak ve yazmak için kullanılır. Bilgiyi yerleştirmek ve dosyalardan bilgi almak için ayrı işlevlere sahiptir. Ayrıca yerel karakter setinde okuma / yazma yapılmasına izin verir.
Programcı bunu herhangi bir türdeki işletim sistemi dosyalarını yazmak için kullanabilir ve dosya doğrudan veritabanı sunucusuna yazılır. İsim ve dizin yolu yazarken belirtilecektir.
Özet
Artık paketleri PL / SQL'de öğrendik ve şimdi aşağıdakilerle çalışabilmelisiniz.
- PL / SQL paketleri ve Bileşenleri
- Paketlerin özellikleri
- Paket öğelerine gönderme ve aşırı yükleme
- Paketlerdeki bağımlılıkları yönetme
- Paket bilgilerini görüntüleme
- UTL Dosyası nedir