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 bulktable WHERE col1 = 11;
EXCEPTION
WHEN no_data_found THEN

raise_application_error(-20001, 'Hata aldik bekledigimiz gibi sorun yok');

end;


DECLARE
l_scn_arr dbms_sql.Number_Table;
BEGIN

SELECT ora_rowscn bulk collect INTO l_scn_Arr FROM bulktable where col1 is null;

EXCEPTION
WHEN no_data_found THEN

raise_application_error(-20001, 'Asla buraya girmeyecek');

end;


DECLARE
l_id_arr dbms_sql.number_table;
BEGIN

SELECT ora_rowscn BULK COLLECT
INTO l_scn_arr
FROM bulktable
WHERE col1 is NULL;

IF l_id.COUNT = 0 THEN
raise_application_error(-20001, 'Hatayi aldik istedigimiz de buydu ');
END IF;
END;

Comments

Popular posts from this blog

Pyppeteer fix for BrowserError: Browser closed unexpectedly

overlay filesystem and containers

How to add pagination to django comments for your model