SlideShare a Scribd company logo
•
                  Ramin Orucov

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

            28 İyul 2012
         Qafqaz Universiteti
Planı




 1 2 3 4
   Dil
yenilikləri
              Performans
               yenilikləri
                                Yeni
                             funksional
                              imkanlar
                                            Digər
                                          yeniliklər
1
    Dil yenilikləri
Dil yenilikləri

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

DECLARE
   l_new_id NUMBER;
BEGIN
      -- Kohne sequence istifade sintaksisi
      SELECT 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);
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 WHEN
     for 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 varchar2
is
begin
   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 imkan
select 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 records
ORA-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_name
FOR [INSERT | UPDATE | DELETE] OF [COLUMN] ON
[TABLE]
COMPOUND TRIGGER

BEFORE STATEMENT IS
BEGIN
…
END BEFORE STATEMENT;

AFTER STATEMENT IS
BEGIN
…
END AFTER STATEMENT;

BEFORE EACH ROW IS
BEGIN
…
END BEFORE EACH ROW;
3
    Yeni 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_table
for 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_table
for each row
follows trigger1
begin
   dbms_output.put_line('Trigger2 - value = ' || :NEW.x);
end trigger2;

create or replace trigger trigger3
after insert on test_table
for each row
follows trigger2
begin
   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 = 1
Trigger2 - value = 1
Trigger3 - value = 1
Trigger1 - value = 2
Trigger2 - value = 2
Trigger3 - value = 2
Trigger1 - value = 3
Trigger2 - value = 3
Trigger3 - value = 3
4
    Digə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.h
•
    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.org
Bloq: raminorucov.wordpress.com
Facebook: www.facebook.com/ramin.orucov

More Related Content

Viewers also liked (20)

PPSX
Lesson4 Protect and maintain databases
Abdullatif Tarakji
 
PPSX
Lesson11 Create Query
Abdullatif Tarakji
 
PPTX
Seminar on mobile os
abani12
 
PPTX
MarketLine Country Statistics Database
MarketLine
 
PPTX
Oracle hard and soft parsing
Ishaan Guliani
 
PPTX
Chapter 11new
Weinberghere
 
PPSX
Lesson5 Print and export databases
Abdullatif Tarakji
 
PDF
الوحدة التاسعة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
PDF
Performance Tuning Azure SQL Database
Grant Fritchey
 
PDF
Performance tuning in sql server
Antonios Chatzipavlis
 
PPTX
Top frinds-انشاء-استعلام-بطريقه-المعالج-6-copy
top friends
 
PDF
SQL Server Tuning to Improve Database Performance
Mark Ginnebaugh
 
PPTX
Database system concepts and architecture
Mahmoud Almadhoun
 
PPTX
Webinar: Performance Tuning + Optimization
MongoDB
 
PPT
Performance Tuning And Optimization Microsoft SQL Database
Tung Nguyen Thanh
 
PDF
الوحدة الخامسة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
PPTX
أنظمة ادارة قواعد البيانات
Mahmoud Almadhoun
 
PDF
الوحدة الثامنة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
PPTX
Database Performance Tuning
Arno Huetter
 
Lesson4 Protect and maintain databases
Abdullatif Tarakji
 
Lesson11 Create Query
Abdullatif Tarakji
 
Seminar on mobile os
abani12
 
MarketLine Country Statistics Database
MarketLine
 
Oracle hard and soft parsing
Ishaan Guliani
 
Chapter 11new
Weinberghere
 
Lesson5 Print and export databases
Abdullatif Tarakji
 
الوحدة التاسعة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
Performance Tuning Azure SQL Database
Grant Fritchey
 
Performance tuning in sql server
Antonios Chatzipavlis
 
Top frinds-انشاء-استعلام-بطريقه-المعالج-6-copy
top friends
 
SQL Server Tuning to Improve Database Performance
Mark Ginnebaugh
 
Database system concepts and architecture
Mahmoud Almadhoun
 
Webinar: Performance Tuning + Optimization
MongoDB
 
Performance Tuning And Optimization Microsoft SQL Database
Tung Nguyen Thanh
 
الوحدة الخامسة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
أنظمة ادارة قواعد البيانات
Mahmoud Almadhoun
 
الوحدة الثامنة - قاعدة البيانات وادارتها
Amin Abu Hammad
 
Database Performance Tuning
Arno Huetter
 

Similar to Oracle 11g PL/SQL proqramlamlaşdırma yenilikləri (9)

PPTX
Azer oug sadigov xayyam
Khayyam Sadigov
 
PPTX
Mustafa Afzali, SQL.pptx
ShahFighter
 
PPS
Oracle SQL Basic SELECT Statement
guest4c01c7
 
PDF
Oracle audit fga - azerbaycan dilinde
Ulfet Tanriverdiyev
 
PPTX
Oracle streams - azerbaijani
Ulfet Tanriverdiyev
 
PDF
Invalid obyektlerin kampilasiyasi
Ulfet Tanriverdiyev
 
PDF
Oracle 11g expdp alib oracle 10g import etmek
Ulfet Tanriverdiyev
 
PPT
Ikt SahəSində SahəSindəKi BeynəLxalq Sertifikatlar Və OnlarıN öNəMi Qafqaz ...
guest5ae460
 
PPT
Ikt SahəSində SahəSindəKi BeynəLxalq Sertifikatlar Və OnlarıN öNəMi Qafqaz ...
Oxatan
 
Azer oug sadigov xayyam
Khayyam Sadigov
 
Mustafa Afzali, SQL.pptx
ShahFighter
 
Oracle SQL Basic SELECT Statement
guest4c01c7
 
Oracle audit fga - azerbaycan dilinde
Ulfet Tanriverdiyev
 
Oracle streams - azerbaijani
Ulfet Tanriverdiyev
 
Invalid obyektlerin kampilasiyasi
Ulfet Tanriverdiyev
 
Oracle 11g expdp alib oracle 10g import etmek
Ulfet Tanriverdiyev
 
Ikt SahəSində SahəSindəKi BeynəLxalq Sertifikatlar Və OnlarıN öNəMi Qafqaz ...
guest5ae460
 
Ikt SahəSində SahəSindəKi BeynəLxalq Sertifikatlar Və OnlarıN öNəMi Qafqaz ...
Oxatan
 
Ad

More from Ramin Orujov (6)

PPTX
Best practices for RESTful web service design
Ramin Orujov
 
PPTX
Android Platform Overview - Azercell Barama
Ramin Orujov
 
PPTX
Hackathon Azerbaijan Android API Overview and Repository
Ramin Orujov
 
PPTX
Hackathon Azerbaijan Android Age - Next Step
Ramin Orujov
 
PPTX
Ikt sahəsində əsas istiqamətlər və iş imkanları
Ramin Orujov
 
PPTX
Android platform
Ramin Orujov
 
Best practices for RESTful web service design
Ramin Orujov
 
Android Platform Overview - Azercell Barama
Ramin Orujov
 
Hackathon Azerbaijan Android API Overview and Repository
Ramin Orujov
 
Hackathon Azerbaijan Android Age - Next Step
Ramin Orujov
 
Ikt sahəsində əsas istiqamətlər və iş imkanları
Ramin Orujov
 
Android platform
Ramin Orujov
 
Ad

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

  • 1. Ramin Orucov Oracle 11g PL/SQL proqramlaşdırma yenilikləri 28 İyul 2012 Qafqaz Universiteti
  • 2. Planı 1 2 3 4 Dil yenilikləri Performans yenilikləri Yeni funksional imkanlar Digər yeniliklər
  • 3. 1 Dil yenilikləri
  • 4. Dil yenilikləri • SEQUENCE istifadəsi • CONTİNUE əmri • Qarışıq parameter dəstəyi • FORALL bulk bind atribute dəstəyi
  • 5. SEQUENCE DECLARE l_new_id NUMBER; BEGIN -- Kohne sequence istifade sintaksisi SELECT 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);
  • 6. 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 WHEN for k in 1 .. 20 loop continue when mod(k, 2)=0; dbms_output.put_line(k); end loop; end;
  • 7. Qarışıq parameter dəstəyi create or replace function full_name(p_first_name in varchar2, p_last_name in varchar2) return varchar2 is begin 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 imkan select 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
  • 8. 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;
  • 9. 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 records ORA-06550: line 9, column 22: PLS-00382: expression is of wrong type
  • 10. 2 Performans yenilikləri
  • 11. Performans yenilikləri • PL/SQL native compilation • SİMPLE_İNTEGER • Fine grained dependency tracking • RESULT CACHE • COMPOUND trigger • İntra-unit inline
  • 12. PL/SQL Native compilation • PVM – PL/SQL Virtual Machine • Oracle 9i, 10g – C compiler, OS linker, loader proqramları • Plsql_Code_type
  • 13. 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.
  • 14. 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;
  • 15. COMPOUND TRIGGER CREATE TRIGGER trigger_name FOR [INSERT | UPDATE | DELETE] OF [COLUMN] ON [TABLE] COMPOUND TRIGGER BEFORE STATEMENT IS BEGIN … END BEFORE STATEMENT; AFTER STATEMENT IS BEGIN … END AFTER STATEMENT; BEFORE EACH ROW IS BEGIN … END BEFORE EACH ROW;
  • 16. 3 Yeni funksional imkanlar
  • 17. 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
  • 18. 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_table for each row begin dbms_output.put_line('Trigger1 - value = ' || :NEW.x); end trigger1;  
  • 19. Triggerlərin işləmə sırası create or replace trigger trigger2 after insert on test_table for each row follows trigger1 begin dbms_output.put_line('Trigger2 - value = ' || :NEW.x); end trigger2; create or replace trigger trigger3 after insert on test_table for each row follows trigger2 begin dbms_output.put_line('Trigger3 - value = ' || :NEW.x); end trigger3;
  • 20. 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 = 1 Trigger2 - value = 1 Trigger3 - value = 1 Trigger1 - value = 2 Trigger2 - value = 2 Trigger3 - value = 2 Trigger1 - value = 3 Trigger2 - value = 3 Trigger3 - value = 3
  • 21. 4 Digər yeniliklər
  • 22. Digər yeniliklər • PL/SQL hierarchical profiler • PL/Scope
  • 23. 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.h • http:// www.oracle.com/technetwork/articles/sql/11g-efficient-coding-093640.html • http://www.oracle-developer.net/display.php?id=507
  • 24. Əlaqə Web site: www.azeroug.org Bloq: raminorucov.wordpress.com Facebook: www.facebook.com/ramin.orucov