Oracle PL/SQL proqramlarında asılılıqların idarəsi

Posted on 7 Sentyabr 2010. Filed under: PL/SQL | Etiketlər: , , , |


Bu yazıda Oracle 10g və 11g VBİS-lərində PL/SQL proqramlarında asılılıqları idarəsi və fərqlərini izah etməyə izah edəcəm.

Oracle VBİS-i PL/SQL proqramlarının digər obyektlərdən asılılığını tam obyekt səviyyəsində izləyir. Bu o deməkdir ki, hər hansı bir cədvələ yeni sütun əlavə edilsə, ondan asılı olan bütün obyektlər(view, procedure, function və s.) avtomatik olaraq invalid olacaq. Amma bizim prosedur məntiqi olaraq yeni əlavə edilmiş sütundan asılı deyil, onu istifadə etmir. Eyni məsələ bizim prosedurun select etmədiyi hər hansı bir sütunun tipinin dəyişməsi üçün də keçərlidir. Cədvəlin hər hansı bir sütunu dəyişdirildikdə, bizim prosedur ondan asılı olmasa da Oracle VBİS-i onu avtomatik olaraq invalid edir. Oracle 11g VBİS-də bu vəziyyət müsbət yöndə dəyişdirilmişdir. Artıq Oracle 11g VBİS-i asılılıqları tam obyekt səviyyəsində yox, daha kiçik səviyyədə izləyə bilir.

Bu məsələyə əvvəlcə Oracle 10g VBİS üzərində baxaq.

SYS istifadəçisi ilə Oracle 10g VBİS-nə qoşuluruq.

HR istifadəçisi altında aşağıdakı paketi yaradırıq:

create or replace package hr.pkg_test
is
    function get_manager(p_employee_id in number) return varchar2;    
end pkg_test;

create or replace package body hr.pkg_test
as
    function get_manager(p_employee_id in number) 
    return varchar2
    is
        l_manager varchar2(50);
    begin
        select m.first_name || ' ' || m.last_name into l_manager 
        from hr.employees e, hr.employees m 
        where e.manager_id=m.employee_id and e.employee_id=p_employee_id;
        
        return l_manager;
    end get_manager;    
end pkg_test;

Yeni yaratdığımız paketin cari vəziyyətini yoxlayırıq.

select object_name, object_type, status 
from all_objects
where owner='HR' and object_name='PKG_TEST'

Paket içərisindəki GET_MANAGER funksiyası verilmiş işçi koduna əsasən onu rəhbərinin adını, soyadını qaytarır. Bu funksiya HR.EMPLOYEES cədvəlinin EMPLOYEE_ID, MANAGER_ID, FIRST_NAME və LAST_NAME sütunlarından asılır. Bu cədvəlin strukturu aşağıdakı kimidir:

İndi isə bu cədvəldəki email sütununu aşağıdakı kimi dəyişək:

alter table hr.employees
modify email varchar2(40);

Paketin cari vəziyyətinə baxaq:

Gördüyünüz kimi GET_MANAGER funksiyası email sütunundan asılı olmasa, bütün paket invalid oldu.

GET_MANAGER funksiyasını istifadə etsək, Oracle əvvəlcə paketi kompilyasiya edəcək, statusu valid olduqdan sonra onu istifadə etməyimizə imkan verəcək.

select hr.pkg_test.get_manager(110)  from dual;


Oracle 11g VBİS-də asılılıqların idarəsi daha da inkişaf etdirilmilmişdir, artıq PL/SQL proqramlarının asılılığı obyektin içindəki elementlər səviyyəsində izlənilir. Eyni əməliyyatları Oracle 11g VBİS-də yoxlayaq.

Əvvəlcə SYS istifadəçisi ilə Oracle 11g VBİS-nə qoşuluruq.

Eyni paketi yeni bazada yaradıb vəziyyətini yoxlayaq:

Email sütununu aşağıdakı kimi dəyişib paketin statusunu təkrar yoxlayaq:

alter table hr.employees
modify email varchar2(40);


Gördüyünüz kimi paketin statusu valid olaraq qaldı, çünki o email sütunundan asılı deyil.

İndi isə manager_id sütununu aşağıdakı kimi dəyişək və paketin cari vəziyyətinə baxaq:

alter table hr.employees
modify manager_id number(7);


Gördüyünüz kimi manager_id sütunu dəyişildikdən sonra paket avtomatik olaraq invalid oldu, çünki həmin sütun get_manager funksiyasında istifadə olunur.

Fine-grained dependency haqqında daha ətraflı məlumat almaq üçün aşağıdakı qaynağa müraciət edə bilərsiniz:

Oracle® Database Advanced Application Developer’s Guide, 11g Release 2 (11.2), Part Number E10471-05, “18.Schema Object Dependency”


Ümid edirəm ki, Oracle 11g VBİS-dəki bu yenilik aydın oldu. Sual, tənqid və təklifləriniz üçün şərh yazmaqdan çəkinməyin!
Uğurlar!

Make a Comment

Bir şərh yazın

2 Cavab to “Oracle PL/SQL proqramlarında asılılıqların idarəsi”

RSS Feed for Ramin Orucovun Java və Oracle bloqu Comments RSS Feed

Cox gozel izah elemisen Ramin, tesekkurler.


Where's The Comment Form?

    Haqqında

    Java ilə obyekt yönlü proqramlaşdırma, Java web proqramlaşdırma, Oracle SQL, PL/SQL proqramlaşdırma, optimallaşdırma

    RSS

    Subscribe Via RSS

    • Subscribe with Bloglines
    • Add your feed to Newsburst from CNET News.com
    • Subscribe in Google Reader
    • Add to My Yahoo!
    • Subscribe in NewsGator Online
    • The latest comments to all posts in RSS

    Meta

Liked it here?
Why not try sites on the blogroll...