24
Ramin Orucov Oracle 11g PL/SQL proqramlaşdırma yenilikləri 28 İyul 2012 Qafqaz Universiteti

Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Embed Size (px)

DESCRIPTION

Oracle 11g PL/SQL proqramlaşdırma yeniliklər haqda qısa məlumat

Citation preview

Page 1: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

• Ramin Orucov

Oracle 11g PL/SQL proqramlaşdırma yenilikləri

28 İyul 2012Qafqaz Universiteti

Page 2: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Planı

1Dil yenilikləri 2Performans

yenilikləri 3Yeni

funksional imkanlar

4Digər yeniliklər

Page 3: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Dil yenilikləri

1

Page 4: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Dil yenilikləri

• SEQUENCE istifadəsi• CONTİNUE əmri• Qarışıq parameter dəstəyi• FORALL bulk bind atribute

dəstəyi

Page 5: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;

Page 6: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;

Page 7: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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

Page 8: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;

Page 9: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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

Page 10: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

2 Performans yenilikləri

Page 11: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Performans yenilikləri

• PL/SQL native compilation• SİMPLE_İNTEGER• Fine grained dependency

tracking• RESULT CACHE• COMPOUND trigger• İntra-unit inline

Page 12: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

PL/SQL Native compilation

• PVM – PL/SQL Virtual Machine

• Oracle 9i, 10g – C compiler, OS linker, loader proqramları

• Plsql_Code_type

Page 13: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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.

Page 14: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;/

Page 15: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;

Page 16: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

3Yeni funksional imkanlar

Page 17: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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

Page 18: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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; 

Page 19: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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;

Page 20: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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

Page 21: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

4Digər yeniliklər

Page 22: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Digər yeniliklər• PL/SQL hierarchical profiler• PL/Scope

Page 23: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

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

Page 24: Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri

Əlaqə

Web site: www.azeroug.orgBloq: raminorucov.wordpress.com Facebook: www.facebook.com/ramin.orucov