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