Posts

Showing posts from November, 2007

oracle advanced queue - rule based subscriber

/* Oracle Advance Queue da rule based subscriber lar ile ilgili bir örnek sunacağım demo_q adlı bir queue yaratacağız ve bu queue ya gönderilecek mesajlar için 3 tane rule based subscriber tanımlayacağız. Bunlardan biri tüm mesajları almak isteyen diğeri sadece pozitif id ye sahip bir diğeri de negatif id ye sahip mesajları almak isteyen subscriberlar olacak. Bu modelde queue ya enqueue edilecek her mesaj subscriber ların rule ları na bakılarak oracle tarafından gerekirse mesaji almak isteyen her subscriber icin bir kopya olacak şekilde yaratilacak. */ --Once Queue Type ımızı yaratıyoruz CREATE OR REPLACE TYPE qtype AS OBJECT ( -- Author : SC -- Created : 29/11/2007 9:02:51 PM -- Purpose : -- Attributes id NUMBER ) ; / -- Queue Tablo muzu multiple consumer olarak yaratiyoruz BEGIN dbms_aqadm.create_queue_table(queue_table => 'DEMO_QT', queue_payload_type => 'QTYPE', multiple_consumers =>

Practical-Oracle-8i-Efficient-Databases +

Ebay'dan ısmarladığım yeni kitabım nihayet geldi bu sefer baya uzun sürdü yolculuk tam 23 gün :D tam da gelmedi kayboldu diye ebay a şikayet paypal e şikayet etme girişimlerime başladığım sırada bir cumartesi gelmesi beni oldukça şaşırttı. Kütüphanemi bence oracle olmazsa olmaz kitaplar olarak belirlediğim kitaplardan biri Practical-Oracle-8i-Efficient-Databases ile daha güçlendirdim. Yakaladığım güzellikleri sizlerle blog da paylaşacağım inş.

Bulk collect ve no_data_found

Hataya çok açık olan bir konuya değinmek istiyorum.Bildiğimiz gibi klasik select into ile tablodan okuduğumuz veriyi lokal değişkenimize yazıyoruz. Select ile seçtğimiz sonuç kümesi boş gelirse no_data_found exception ı ile hatayı yakalayabiliyoruz. Bunun paralelinde bulk_collect ile tablodan okuduğumuz veriyi lokal array imize yazmak istediğimizde ki sonuç kümesinin boş olduğunu varsayalım bu durumda oracle no_data_found hatasını fırlatmıyor ve eğer bizimde iş sürecimizde bu hatayı handle etmeye ihtiyacımız varsa farklı bir yol kullanmamız gerekiyor.Bunu da bulk collect işlemlerinde oracle ın lokalimizde yüklemeyi yapacağımız arrayimizi otomatik olarak boşaltmasından yararlanarak yani array in count metodunun sıfıra eşitliğini kullanarak yapıyoruz. Örneklerle konuyu açıklamaya çalışayım. drop table bulktable; create table bulktable (col1 integer); insert into bulktable values(1); insert into bulktable values(2); commit; DECLARE l_id PLS_INTEGER; BEGIN SELECT ora_rowscn INTO l_id FROM