Upload
ramin-orujov
View
1.389
Download
2
Embed Size (px)
DESCRIPTION
Oracle 11g PL/SQL proqramlaşdırma yeniliklər haqda qısa məlumat
Citation preview
• Ramin Orucov
Oracle 11g PL/SQL proqramlaşdırma yenilikləri
28 İyul 2012Qafqaz Universiteti
Planı
1Dil yenilikləri 2Performans
yenilikləri 3Yeni
funksional imkanlar
4Digər yeniliklər
Dil yenilikləri
1
Dil yenilikləri
• SEQUENCE istifadəsi• CONTİNUE əmri• Qarışıq parameter dəstəyi• FORALL bulk bind atribute
dəstəyi
SEQUENCE
DECLAREl_new_id NUMBER;
BEGIN-- Kohne sequence istifade sintaksisiSELECT employees_seq.NEXTVAL INTO
l_new_id FROM DUAL;DBMS_OUTPUT.put_line ('New id = ' ||
l_new_id);END;
DECLARE l_new_id NUMBER;
BEGIN -- Yeni sequence istifade sintaksisi l_new_id := employees_seq.NEXTVAL; DBMS_OUTPUT.put_line ('New id = ' ||
l_new_id); END;
CONTINUE
begin -- CONTINUE for k in 1 .. 20 loop
if mod(k, 2)=0 then continue;
end if; dbms_output.put_line(k);
end loop;end;
begin -- CONTINUE WHENfor k in 1 .. 20 loop
continue when mod(k, 2)=0; dbms_output.put_line(k);
end loop;end;
Qarışıq parameter dəstəyi
create or replace function full_name(p_first_name in varchar2, p_last_name in varchar2)
return varchar2isbegin return p_first_name || ' ' || p_last_name;end full_name;
select employee_id, full_name(first_name, last_name) employee, salary from hr.employees -- Yeni imkanselect employee_id, full_name(p_first_name => first_name, p_last_name => last_name) employee, salary from hr.employees select employee_id, full_name(p_last_name => last_name, p_first_name => first_name) employee, salary from hr.employees
select employee_id, full_name(first_name, p_last_name => last_name) employee, salary from hr.employees
FORALL bulk bind atribute dəstəyi
declare type employee_aat is table of hr.employees%rowtype index by pls_integer; l_employees employee_aat;begin select * bulk collect into l_employees from hr.employees; forall i in 1..l_employees.count update hr.employees set salary = l_employees(i).salary - 100 where employee_id = l_employees(i).employee_id; dbms_output.put_line(SQL%ROWCOUNT || ' rows updated');end;
FORALL bulk bind atribute dəstəyi
Oracle Error ORA-06550: line 9, column 22:PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND table of recordsORA-06550: line 9, column 22:PLS-00382: expression is of wrong type
2 Performans yenilikləri
Performans yenilikləri
• PL/SQL native compilation• SİMPLE_İNTEGER• Fine grained dependency
tracking• RESULT CACHE• COMPOUND trigger• İntra-unit inline
PL/SQL Native compilation
• PVM – PL/SQL Virtual Machine
• Oracle 9i, 10g – C compiler, OS linker, loader proqramları
• Plsql_Code_type
SİMPLE_İNTEGER
Oracle 11g VBİS-də yeni SIMPLE_INTEGER adlı ədəd tipi əlavə edilmişdir, onun qiymət aralığı -232 və 232-1 intervalında ola bilər, NULL qiyməti qəbul etmir. Bu intervalın alt sərhədini keçəndə qiymət avtomatik olaraq üst sərhədə bərabər olur, oxşar şəkildə də üst sərhədi keçəndə onun qiyməti avtomatik alt sərhədin qiymətinə bərabər olur.
Oracle şirkəti PLS_İNTEGER tipinin əvəzinə yeni SİMPLE_İNTEGER tipini istifadə etməyi tövsiyə edir. Bu tipdə olan dəyişkənlər ilə hesablamalar daha sürətli olur. Sadə testlər əsasında aşağıdakı sürət fərqlərini demək olar:INTERPRETED rejimdə PLS_İNTEGER-ə görə 10%, NUMBER tipinə görə isə 2-2.5 dəfə daha sürətli işləyir.NATİVE rejimdə isə PLS_İNTEGER-ə görə 8-10 dəfə, NUMBER tipinə görə isə 30 dəfə daha sürətli işləyir.
RESULT_CACHE
CREATE OR REPLACE FUNCTION get_employee (p_employee_id IN employees.employee_id%TYPE) RETURN employees%ROWTYPE RESULT_CACHE RELIES_ON (employees)IS l_employee employees%ROWTYPE;BEGIN SELECT * INTO l_employee FROM employees WHERE employee_id = p_employee_id;
RETURN l_employee;EXCEPTION WHEN NO_DATA_FOUND THEN /* Return an empty record. */ RETURN l_employee;END get_employee;/
COMPOUND TRIGGER
CREATE TRIGGER trigger_nameFOR [INSERT | UPDATE | DELETE] OF [COLUMN] ON [TABLE]COMPOUND TRIGGER
BEFORE STATEMENT ISBEGIN…END BEFORE STATEMENT;
AFTER STATEMENT ISBEGIN…END AFTER STATEMENT;
BEFORE EACH ROW ISBEGIN…END BEFORE EACH ROW;
AFTER EACH ROW ISBEGIN…END AFTER EACH ROW;END trigger_name;
3Yeni funksional imkanlar
Yeni funksional imkanlar• Triggerlərin işləmə sırası• DBMS_SQL CLOB dəstəyi• DBMS_SQL təhlükəsizlik• UTL_* paketləri üçün səlahiyyət
Triggerlərin işləmə sırasıİlk dəfə Oracle 11g VBİS-də bir cədvəl üzərində olan triggerlərin işləmə ardıcıllığını təyin etmək mümkün oldu, bunun üçün yeni FOLLOWS adlı açar söz əlavə edildi.
create table test_table( x number);create or replace trigger trigger1 after insert on test_tablefor each row begin dbms_output.put_line('Trigger1 - value = ' || :NEW.x);end trigger1;
Triggerlərin işləmə sırasıcreate or replace trigger trigger2 after insert on test_tablefor each row follows trigger1begin dbms_output.put_line('Trigger2 - value = ' || :NEW.x);end trigger2;
create or replace trigger trigger3 after insert on test_tablefor each row follows trigger2begin dbms_output.put_line('Trigger3 - value = ' || :NEW.x);end trigger3;
Triggerlərin işləmə sırasıinsert into test_table values(1);insert into test_table values(2);insert into test_table values(3);
NəticəTrigger1 - value = 1Trigger2 - value = 1Trigger3 - value = 1Trigger1 - value = 2Trigger2 - value = 2Trigger3 - value = 2Trigger1 - value = 3Trigger2 - value = 3Trigger3 - value = 3
4Digər yeniliklər
Digər yeniliklər• PL/SQL hierarchical profiler• PL/Scope
Qaynaqlar• Sam R. Alapati, Charles Kim, Oracle Database 11g - New
Features for DBAs and Developers, Apress• http
://docs.oracle.com/cd/E14072_01/appdev.112/e10472/whatsnew.htm• http
://www.oracle.com/technology/tech/pl_sql/pdf/PL/SQL_new_in_11gr1.pdf, Oracle White Paper, PL/SQL Enhancements in Oracle Database 11g
• http://docs.oracle.com/cd/E11882_01/appdev.112/e10471/adfns_dependencies.htm
• http://www.oracle.com/technetwork/articles/sql/11g-efficient-coding-093640.html
• http://www.oracle-developer.net/display.php?id=507
Əlaqə
Web site: www.azeroug.orgBloq: raminorucov.wordpress.com Facebook: www.facebook.com/ramin.orucov