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

Post on 18-May-2015

1.390 views 2 download

description

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

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

• 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