geliştiriciler için oracle_part_2

16
Geliştiriciler için Oracle 11g yeni Özellikler

Upload: anar-godjaev

Post on 18-Jul-2015

101 views

Category:

Documents


3 download

TRANSCRIPT

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 number,

product_code number,

state_code 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 number,

product_code number,

state_code 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.