ݺߣ

ݺߣShare a Scribd company logo
Geliştiriciler için
Oracle 11g yeni Özellikler
PL/SQL 11g yeni özellik
Simple Integer data Type

•

The SIMPLE_INTEGER ;PLS_INTEGER bir alt türüdür ve aritmetik işlemleri çok
hızlandırmaktadır.

l_simple_integer

SIMPLE_INTEGER := 0;

l_simple_integer_incr SIMPLE_INTEGER := 1;
FOR i IN 1 .. l_loops LOOP
l_simple_integer := l_simple_integer + l_simple_integer_incr;
END LOOP;
PL/SQL 11g yeni özellik
Continue
CONTINUE komutu ile yeni bir iterasyon başlatılabilir veya CONTINUE WHEN ile belli durumlarda
iterasyona devam edebilirsiniz
DECLARE
l_number NUMBER := 0;
BEGIN
FOR i IN 1 .. 100 LOOP
CONTINUE WHEN MOD(i,2) = 0;
-- Do something here!
l_number := l_number + 1;
END LOOP;

PL/SQL 11g yeni özellik
Sequence kullanımı

•

PL/SQL içinde NEXTVAL and CURRVAL sözde komutları ile SELECT .. DUAL kullanmadan
Sequenceları kullanabilirsiniz.

CREATE SEQUENCE test1_seq START WITH 1000000;
FOR i IN 1 ..l_loops LOOP
l_value := test1_seq.NEXTVAL;
END LOOP;
PLSQL_OPTIMIZE_LEVEL = 0

Bu seviyede kod üzerinde hiç bir değişiklik yapılmaz . Oldukları gibi execute edilirler.

Kodu değiştirmez
DECLARE
L_START_TIME NUMBER;
L_END_TIME

NUMBER;

A

NUMBER;

B

NUMBER;

C

NUMBER;

BEGIN
L_START_TIME := DBMS_UTILITY.GET_TIME();
FOR I IN 1..1000000000 LOOP
A := 1;
B := 1;
C := A+1;
END LOOP;
L_END_TIME := DBMS_UTILITY.GET_TIME();
DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME));
END;
/
Execution time:19294
PLSQL_OPTIMIZE_LEVEL = 1

Bazı optimizasyon yöntemleri kullanır. Kod içindeki gereksiz exception ve komutları
çalıştırmaz. Kodu çok fazla değiştirmez.
DECLARE
L_START_TIME NUMBER;
L_END_TIME

NUMBER;

A

NUMBER;

B

NUMBER;

C

NUMBER;

BEGIN
L_START_TIME := DBMS_UTILITY.GET_TIME();
FOR I IN 1..1000000000 LOOP
A := 1;
B := 1;
C := A+1;
END LOOP;
L_END_TIME := DBMS_UTILITY.GET_TIME();
DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME));
END;
/
Execution time:7112
PLSQL_OPTIMIZE_LEVEL = 2

En yeni optimizasyon yöntemleri kullanır. Kod içindeki gereksiz exception ve komutları
çalıştırmaz. Kodu çok fazla değiştirir. Aşağıda loop’u direk kaldırır.

DECLARE
L_START_TIME NUMBER;
L_END_TIME

NUMBER;

A

NUMBER;

B

NUMBER;

C

NUMBER;

BEGIN
L_START_TIME := DBMS_UTILITY.GET_TIME();
FOR I IN 1..1000000000 LOOP
A := 1;
B := 1;
C := A+1;
END LOOP;
L_END_TIME := DBMS_UTILITY.GET_TIME();
DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME));
Execution time:0

PL/SQL 11g yeni özellik
Subprogram inlining PLSQL_OPTIMIZE_LEVEL = 3

Subprogram inlining sayesinde subprogramlar , program içinde compile zamanında açılarak orjinal koda
eklenirler. Böylece programlar runtime’da daha hızlı çalışacaklardır

PLSQL_OPTIMIZE_LEVEL=3 ‘de otomatik olarak inline yapılır.
PLSQL_OPTIMIZE_LEVEL=2 ‘ de ise PRAGMA kullanılarak manuel olarak inline yapılabilir.
BEGIN
FOR i IN 1 ..l_loops LOOP
PRAGMA INLINE (add_numbers, 'YES');
l_return := add_numbers(1, i);
END LOOP;
END;
/
PL/SQL 11g yeni özellik
Native Compile işlemi


Native compile 11g ‘de çok kolaylaşmıştır. C compiler ve DBA ‘ler tarafından herhangi bir
manuel müdahale yapılmadan PL/SQL kodları SYSTEM tablespace içinde execute edilebilir
şekilde saklananabilmektedir.



Native Compile işlemi ile sadece PL/SQL komutları hızlanmakta ; SQL komutlarında herhangi bir
iyileşme olmamaktadır.



Çok fazla nümerik işlem yapan kodların Native compile yapılması tavsiye edilmektedir.



Sık sık compile gören ve içinde SQL cümlelleri olan kodlara native compile tavsiye
edilmemektedir.
Partitioning

Oracle 11g Aşağıdaki partitioning özellikleri ile nerdeyse sınısız bir şekilde partitioning yapılabilir
duruma gelinmiştir.
reference partitioning,
interval partitioning,
partitioning virtual columns,
extended composite
Extended Composite Partitioning
Oracle 9i’ de composite partitioning olarak sadece range-hash and range-list
partitioning yapabiliyorduk. Oracle 11g ile beraber aşağıdaki türde composite
partitionlar yaratabiliriz.
•

Range-range

•

Range-hash

•

Range-list

•

List-range

•

List-hash

•

List-list
Composite Partition Örnekleri
create table sales
(
sales_id
product_code
state_code

number,
number,
varchar2(2)

)
partition by list (product_code)
subpartition by list (state_code)
(
partition p101 values (101)
(
subpartition p101_ct values ('CT'),
subpartition p101_ny values ('NY'),
subpartition p101_def values (default)
),
partition p201 values (201)
(
subpartition p201_ct values ('CT'),
subpartition p201_ny values ('NY'),
subpartition p201_def values (default)
)
)

create table sales1
(
sales_id
product_code
state_code

number,
number,
varchar2(2)

)
partition by list (state_code)
subpartition by range (product_code)
(
partition CT values ('CT')
(
subpartition ct_100 values less than (101),
subpartition ct_200 values less than (201)
),
partition NY values ('NY')
(
subpartition NY_100 values less than (101),
subpartition NY_200 values less than (201)
)
)
PL/SQL 11g yeni özellik
READ ONLY tablolar

•

11g ile beraber READ ONLY tablolar tanımlanabilmektedir. Eski versiyonlarda bunu yapabilmek
için view veya Grant kullanılması gerekmekteydi.

ALTER TABLE table_name READ ONLY;
ALTER TABLE table_name READ WRITE;

PL/SQL 11g yeni özellik
Invisible Index

•

Invisible index ile bir tablonun indexi drop edilmeden; execution plan’larda ilgili index’in
kullanılmamasını sağlamış oluruz.

•

OPTIMIZER_USE_INVISIBLE_INDEXES parametresi ile yönetilirler.

CREATE INDEX index_name ON table_name(column_name) INVISIBLE;
ALTER INDEX index_name INVISIBLE;
ALTER INDEX index_name VISIBLE;
PL/SQL 11g yeni özellik
TEMP Tablespace

•

Global Temporary tablolarımızı ayrı bir TEMPORARY tablespacede yaratabiliriz.

create temporary tablespace etl_temp
tempfile ‘../etl_temp_01.dbf'
size 1G;
Tablespace created.
create global temporary table data_load (
input_line varchar2 (2000) )
on commit preserve rows
tablespace etl_temp;
Table created.
PL/SQL 11g yeni özellik
Virtual Kolon

•

Virtual Kolonlar üzerinde index tanımlıyabiliriz. Bu function based index ‘dir

•

Virtual Kolonlar üzerinde Primary Key tanımlıyabilir, Foreign Key olarak kullanabilirsiniz.

•

Virtual Kolon üzerinde partition tanımlıyabilirsiniz

•

Virtual kolon ‘ları sadece DML komutları ile insert veya update edemezsiniz. 

CREATE TABLE employees (
id

NUMBER,

first_name

VARCHAR2(10),

last_name

VARCHAR2(10),

salary

NUMBER(9,2),

comm1

NUMBER(3),

comm2

NUMBER(3),

salary1

AS (ROUND(salary*(1+comm1/100),2)),

salary2

NUMBER GENERATED ALWAYS AS (ROUND(salary*(1+comm2/100),2)) VIRTUAL,

CONSTRAINT employees_pk PRIMARY KEY (id) );
Create index v_salary2 on employees( salary2);
Compound Trigger
Kullanımım

Compound Trigger ilebirtabloyailişkinbirçokdeğişik trigger
ortakdeğişkenlerikullanabilir. Amaç BULK işlemlerde ;bir DML
işlemiilebirdenfazlakayıt update edildiğinde ; tekbir DML ‘in trigger
tarafındaçalıştırılmasınısağlamaktır.
CompundTrigger’da
Before Statement, After Statement , Before row ve After row kodlarıolur.
Tümbukodlarortakdeğişkenlerivedizilereerişirler.
Before row ve Update row kodları ;değişiklikleridiziiçine atar,
After ve Before Stamenetkodlarıise ; BULK dmlişlemleriniçalıştırılar.
Geliştiriciler için Oracle_Part_2
Geliştiriciler için Oracle_Part_2

More Related Content

Geliştiriciler için Oracle_Part_2

  • 2. PL/SQL 11g yeni özellik Simple Integer data Type • The SIMPLE_INTEGER ;PLS_INTEGER bir alt türüdür ve aritmetik işlemleri çok hızlandırmaktadır. l_simple_integer SIMPLE_INTEGER := 0; l_simple_integer_incr SIMPLE_INTEGER := 1; FOR i IN 1 .. l_loops LOOP l_simple_integer := l_simple_integer + l_simple_integer_incr; END LOOP;
  • 3. PL/SQL 11g yeni özellik Continue CONTINUE komutu ile yeni bir iterasyon başlatılabilir veya CONTINUE WHEN ile belli durumlarda iterasyona devam edebilirsiniz DECLARE l_number NUMBER := 0; BEGIN FOR i IN 1 .. 100 LOOP CONTINUE WHEN MOD(i,2) = 0; -- Do something here! l_number := l_number + 1; END LOOP; PL/SQL 11g yeni özellik Sequence kullanımı • PL/SQL içinde NEXTVAL and CURRVAL sözde komutları ile SELECT .. DUAL kullanmadan Sequenceları kullanabilirsiniz. CREATE SEQUENCE test1_seq START WITH 1000000; FOR i IN 1 ..l_loops LOOP l_value := test1_seq.NEXTVAL; END LOOP;
  • 4. PLSQL_OPTIMIZE_LEVEL = 0 Bu seviyede kod üzerinde hiç bir değişiklik yapılmaz . Oldukları gibi execute edilirler. Kodu değiştirmez DECLARE L_START_TIME NUMBER; L_END_TIME NUMBER; A NUMBER; B NUMBER; C NUMBER; BEGIN L_START_TIME := DBMS_UTILITY.GET_TIME(); FOR I IN 1..1000000000 LOOP A := 1; B := 1; C := A+1; END LOOP; L_END_TIME := DBMS_UTILITY.GET_TIME(); DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME)); END; / Execution time:19294
  • 5. PLSQL_OPTIMIZE_LEVEL = 1 Bazı optimizasyon yöntemleri kullanır. Kod içindeki gereksiz exception ve komutları çalıştırmaz. Kodu çok fazla değiştirmez. DECLARE L_START_TIME NUMBER; L_END_TIME NUMBER; A NUMBER; B NUMBER; C NUMBER; BEGIN L_START_TIME := DBMS_UTILITY.GET_TIME(); FOR I IN 1..1000000000 LOOP A := 1; B := 1; C := A+1; END LOOP; L_END_TIME := DBMS_UTILITY.GET_TIME(); DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME)); END; / Execution time:7112
  • 6. PLSQL_OPTIMIZE_LEVEL = 2 En yeni optimizasyon yöntemleri kullanır. Kod içindeki gereksiz exception ve komutları çalıştırmaz. Kodu çok fazla değiştirir. Aşağıda loop’u direk kaldırır. DECLARE L_START_TIME NUMBER; L_END_TIME NUMBER; A NUMBER; B NUMBER; C NUMBER; BEGIN L_START_TIME := DBMS_UTILITY.GET_TIME(); FOR I IN 1..1000000000 LOOP A := 1; B := 1; C := A+1;
  • 7. END LOOP; L_END_TIME := DBMS_UTILITY.GET_TIME(); DBMS_OUTPUT.PUT_LINE('Execution time:'||TO_CHAR(L_END_TIME - L_START_TIME)); Execution time:0 PL/SQL 11g yeni özellik Subprogram inlining PLSQL_OPTIMIZE_LEVEL = 3 Subprogram inlining sayesinde subprogramlar , program içinde compile zamanında açılarak orjinal koda eklenirler. Böylece programlar runtime’da daha hızlı çalışacaklardır PLSQL_OPTIMIZE_LEVEL=3 ‘de otomatik olarak inline yapılır. PLSQL_OPTIMIZE_LEVEL=2 ‘ de ise PRAGMA kullanılarak manuel olarak inline yapılabilir. BEGIN FOR i IN 1 ..l_loops LOOP PRAGMA INLINE (add_numbers, 'YES'); l_return := add_numbers(1, i); END LOOP; END; /
  • 8. PL/SQL 11g yeni özellik Native Compile işlemi  Native compile 11g ‘de çok kolaylaşmıştır. C compiler ve DBA ‘ler tarafından herhangi bir manuel müdahale yapılmadan PL/SQL kodları SYSTEM tablespace içinde execute edilebilir şekilde saklananabilmektedir.  Native Compile işlemi ile sadece PL/SQL komutları hızlanmakta ; SQL komutlarında herhangi bir iyileşme olmamaktadır.  Çok fazla nümerik işlem yapan kodların Native compile yapılması tavsiye edilmektedir.  Sık sık compile gören ve içinde SQL cümlelleri olan kodlara native compile tavsiye edilmemektedir. Partitioning Oracle 11g Aşağıdaki partitioning özellikleri ile nerdeyse sınısız bir şekilde partitioning yapılabilir duruma gelinmiştir. reference partitioning, interval partitioning, partitioning virtual columns, extended composite Extended Composite Partitioning Oracle 9i’ de composite partitioning olarak sadece range-hash and range-list partitioning yapabiliyorduk. Oracle 11g ile beraber aşağıdaki türde composite partitionlar yaratabiliriz. • Range-range • Range-hash • Range-list • List-range • List-hash • List-list
  • 9. Composite Partition Örnekleri create table sales ( sales_id product_code state_code number, number, varchar2(2) ) partition by list (product_code) subpartition by list (state_code) ( partition p101 values (101) ( subpartition p101_ct values ('CT'), subpartition p101_ny values ('NY'), subpartition p101_def values (default) ), partition p201 values (201) ( subpartition p201_ct values ('CT'), subpartition p201_ny values ('NY'),
  • 10. subpartition p201_def values (default) ) ) create table sales1 ( sales_id product_code state_code number, number, varchar2(2) ) partition by list (state_code) subpartition by range (product_code) ( partition CT values ('CT') ( subpartition ct_100 values less than (101), subpartition ct_200 values less than (201) ), partition NY values ('NY') ( subpartition NY_100 values less than (101), subpartition NY_200 values less than (201) ) )
  • 11. PL/SQL 11g yeni özellik READ ONLY tablolar • 11g ile beraber READ ONLY tablolar tanımlanabilmektedir. Eski versiyonlarda bunu yapabilmek için view veya Grant kullanılması gerekmekteydi. ALTER TABLE table_name READ ONLY; ALTER TABLE table_name READ WRITE; PL/SQL 11g yeni özellik Invisible Index • Invisible index ile bir tablonun indexi drop edilmeden; execution plan’larda ilgili index’in kullanılmamasını sağlamış oluruz. • OPTIMIZER_USE_INVISIBLE_INDEXES parametresi ile yönetilirler. CREATE INDEX index_name ON table_name(column_name) INVISIBLE; ALTER INDEX index_name INVISIBLE; ALTER INDEX index_name VISIBLE;
  • 12. PL/SQL 11g yeni özellik TEMP Tablespace • Global Temporary tablolarımızı ayrı bir TEMPORARY tablespacede yaratabiliriz. create temporary tablespace etl_temp tempfile ‘../etl_temp_01.dbf' size 1G; Tablespace created. create global temporary table data_load ( input_line varchar2 (2000) ) on commit preserve rows tablespace etl_temp; Table created.
  • 13. PL/SQL 11g yeni özellik Virtual Kolon • Virtual Kolonlar üzerinde index tanımlıyabiliriz. Bu function based index ‘dir • Virtual Kolonlar üzerinde Primary Key tanımlıyabilir, Foreign Key olarak kullanabilirsiniz. • Virtual Kolon üzerinde partition tanımlıyabilirsiniz • Virtual kolon ‘ları sadece DML komutları ile insert veya update edemezsiniz.  CREATE TABLE employees ( id NUMBER, first_name VARCHAR2(10), last_name VARCHAR2(10), salary NUMBER(9,2), comm1 NUMBER(3), comm2 NUMBER(3), salary1 AS (ROUND(salary*(1+comm1/100),2)), salary2 NUMBER GENERATED ALWAYS AS (ROUND(salary*(1+comm2/100),2)) VIRTUAL, CONSTRAINT employees_pk PRIMARY KEY (id) ); Create index v_salary2 on employees( salary2);
  • 14. Compound Trigger Kullanımım Compound Trigger ilebirtabloyailişkinbirçokdeğişik trigger ortakdeğişkenlerikullanabilir. Amaç BULK işlemlerde ;bir DML işlemiilebirdenfazlakayıt update edildiğinde ; tekbir DML ‘in trigger tarafındaçalıştırılmasınısağlamaktır. CompundTrigger’da Before Statement, After Statement , Before row ve After row kodlarıolur. Tümbukodlarortakdeğişkenlerivedizilereerişirler. Before row ve Update row kodları ;değişiklikleridiziiçine atar, After ve Before Stamenetkodlarıise ; BULK dmlişlemleriniçalıştırılar.