Pandas kütüphanesin de çalışmalarımıza kaldığımız yerden devam edelim. Yapacağımız alıştırmalar ile veri manipülasyon işlemlerini göreceğiz. Öncelikle jupiter notebooku açıp pandas kütüphanesini import edelim. Daha sonra ilgili urlden datamızı çekelim.

import pandas as pd

df = pd.read_csv(“https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/05_Merge/Auto_MPG/cars2.csv”)
print(df.head())

Veri setinde kaç kolon mevcut olduğunu inceleyelim.

df.shape[0]

Sadece silindir sayısı 4 ten büyük olan datayı getirelim.

df[df.cylinders > 4]

Sadece araç markası “honda civic” olanların datasını getirelim.

df[df.car == “honda civic”]

Veri setinde ki mpg (yakıt tüketim miktarı) değerlerini büyükten küçüğe, sonra silindir değerlerini büyükten küçüğe sıralayalım.

df.sort_values([‘cylinders’, ‘mpg’], ascending = False)

Araç markalarına göre ortalama yakıt tüketim miktarlarını hesaplayalım.

df.groupby(‘car’).mpg.mean()

Araç markalarına göre ortalama yakıt tüketim miktarlarının istatistiksel değerlerini hesaplatalım.

df.groupby(‘car’).mpg.describe()

Araç markalarına göre tüm kolonların ortalamalarını hesaplayalım.

df.groupby(‘car’).mean()

Araç markalarına göre silindir sayılarının ortalama, minimum, maksimum değerlerini hesaplayalım.

df.groupby(‘car’).cylinders.agg([‘mean’, ‘min’, ‘max’])

Araç markası “honda civic” olanların yakıt tüketim miktarının ortalama, minimum, maksimum değerlerini hesaplayalım.

df[df.car == “honda civic”].mpg.agg([‘mean’, ‘min’, ‘max’])

Araç markalarına göre yakıt tüketim miktarının ortalamasını, silindir sayısını minimum değerlerini, araç ağırlıklarının maksimum değerlerini hesaplayalım.

df.groupby(‘car’).aggregate({‘mpg’:’mean’,’cylinders’:’min’,’weight’:’max’})

Bu çalışma ile pandas kütüphanesin de veri manipülasyon işlemlerini görmüş olduk. Pandas ile ilgili çalışmalarımıza çeşitli konularla devam edeceği. Görüşmek üzere.

Veri bilimi alanı üzerine yapılan çalışmalarda çok sık kullanılan pandas kütüphanesini jupyter notebook aracılığı ile inceleyelim. Hem pandas kütüphanesini tanımış hemde egzersizlerle kendimizi geliştirmiş olacağız. Çalışmayı anaconda üzerinde jupyter notebook kullanarak yapacağız. Pandas kütüphanesinde basit alıştırmalar ile başlayalım.

Öncelikle jupter notebooku açıp pandas kütüphanesini import edelim. Kodlarımızı blok blok shift enter ile çalıştırabiliriz. Resimlerde görülen “#” ile başlyan satırlar yorum satırıdır.

import pandas as pd

İlgili url adresinden datamızı çekelim.

cars = pd.read_csv(“https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/05_Merge/Auto_MPG/cars1.csv”)
print(cars1.head())

Veri seti içinden ilk 9 satırı getirelim. cars.head(9)

Verisetinde son 5 satırı getirelim : cars.tail(5)

Veri setinde kaç satır ve sütun olduğunu görelim : cars.shape

Verisetinde sadece kaç satır olduğunu görmek istersek : cars.shape[0]

Verisetinde kaç sütun olduğunu görmek istersek : cars.shape[1]

Verisetinde kolonların adlarını görmek istersek : cars.columns

Sadece “car” kolonunu yazdıralım : cars[“car”] veya cars.car.head()

“car” kolonunda kaç farklı değer mevcut : cars.car.nunique()

“car” kolonunda en sık kullanılan veri : cars.car.value_counts().head(1)

Verisetinde ki kolonların özet bilgilerini gösterelim, bu işlem sayısal değerler için yapılır ve açıklayıcı olur : cars.describe()

Verisetinden sadece “mpg” kolonunun özet bilgilerini gösterelim : cars.mpg.describe()

Verisetinden sadece “mpg” kolonunun ortalamasını gösterelim : cars.mpg.mean()

Bu çalışma ile pandas kütüphanesi ile tanışmış ve kısa scriptlerle ilk çalışmamızı yapmış olduk. Pandas ile ilgili çalışmalarımız çeşitli konularla devam edecek. Görüşmek üzere.

Oracle PL/SQL Tutorial  / Dual

Dual tablosu tek bir satır içerir. Dual tablosu içinde varchar2 tipinde dummy olarak isimlendirilen tek bir kolon vardır. Dual tablosu içinde X değeri tek bir satır içerir.

DESCRIBE dual;

Name         Null?    Type
DUMMY                 VARCHAR2(1)
SELECT * FROM dual;
Dual tablosu kullanılarak basit hesaplamalara yapılabilir
select 123 * 456 from dual;
select sysdate from dual;
select to_char(to_date ('07/09/2017','dd/mm/yyyy'),'yyyymm') as tarih from  dual;
select to_char (sysdate,'mm') as tarih from  dual;

Oracle PL/SQL Tutorial  / Arithmetic Operator

Sql dilinde aritmetik operatörler öncelik sırasına göre kullanılır. Öncelikler çarpma ve bölme daha sonra toplama ve çıkarma yapılır. Eğer operatörler aynı önceliğe sahipse, soldan sağa doğru ilk rakamdan başlanır.

SELECT 10 * 12 / 3 - 1 FROM dual;
  • Parantezli işlemler varsa ilk olarak parantez içinde ki aritmetik operatörler ile ilgili işlem yapılır.
SELECT 10 * (12 / 3 - 1) FROM dual;

Oracle PL/SQL Tutorial  / Comparison Operators

Where ifadesi altında birçok karşılaştırma operatörü kullanılabilir.

Operator Description

= Equal
<> or != Not equal
< Less than
> Greater than
<= Less than or equal
>= Greater than or equal
ANY Compares one value with any value in a list
ALL Compares one value with all values in a list

 

Operatörler için örneklere başlamadan önce örnek bir tablo tasarlayıp. İçerisine data ekleyelim.

create table Employee(
ID                 VARCHAR2(4 BYTE)         NOT NULL,
First_Name         VARCHAR2(10 BYTE),
Last_Name          VARCHAR2(10 BYTE),
Start_Date         DATE,
End_Date           DATE,
Salary             Number(8,2),
City               VARCHAR2(10 BYTE),
Description        VARCHAR2(15 BYTE));



insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary, City, Description)
values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester');

select * from Employee;


ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester
  • Where ifadesi altında not equal (<>) operatörünün kullanımı
SELECT * FROM employee WHERE id <> 2;

ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester
  • Where ifadesi altında büyüktür (>)operatörünün kullanımı
SELECT id, first_name FROM employee WHERE id > 3;

ID   FIRST_NAME
---- ----------
04   Celia
05   Robert
06   Linda
07   David
08   James
  • Where ifadesi altında küçük ve eşit (<=)operatörünün kullanımı
select id, first_name from employee where id <= 3;
ID   FIRST_NAME
---- ----------
01   Jason
02   Alison
03   James

Oracle PL/SQL Tutorial  / Logical Operators

Where ifadesi altında 3 adet mantıksal operatör kullnılabilir. Mantıksal operatörler satırları koşul verilerek sınırlamayı sağlar.

Mantıksal Operatörler:

·         Returns true when both x and y are true
·         Returns true when both x or y are true
 ·  NOT x Returns true if x is false, and returns false if x is true

 

  • And mantıksal operatörü ile satırları getirmek.
SELECT * FROM employee  WHERE start_date > '01-JAN-1970' AND id > 3;

ID   FIRST_NAME           LAST_NAME            START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- -------------------- -------------------- --------- --------- ---------- ---------- ---------------
04   Celia                Rice                 24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert               Black                15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda                Green                30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David                Larry                31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James                Cat                  17-SEP-96 15-APR-02    1232.78 Vancouver  Tester
  • Or mantıksal operatörü ile satırları getirmek.
SELECT * FROM employee  WHERE start_date > '01-JAN-1970' OR id > 3;

ID   FIRST_NAME           LAST_NAME            START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- -------------------- -------------------- --------- --------- ---------- ---------- ---------------
01   Jason                Martin               25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
02   Alison               Mathews              21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
03   James                Smith                12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
04   Celia                Rice                 24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert               Black                15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda                Green                30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David                Larry                31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James                Cat                  17-SEP-96 15-APR-02    1232.78 Vancouver  Tester
  • Not mantıksal operatörü ile satırları getirmek.
SELECT * FROM employee  WHERE not(start_date > '01-JAN-1970');
SELECT * FROM employee  WHERE id not in  (3,4,5);
ID FIRST_NAME LAST_NAME START_DATE END_DATE SALARY CITY DESCRIPTION
01 Jason Martin 07.25.1996 00:00:00 07.25.2006 00:00:00 1.235 Toronto Programmer
02 Alison Mathews 03.21.1976 00:00:00 02.21.1986 00:00:00 6.662 Vancouver Tester
06 Linda Green 07.30.1987 00:00:00 01.04.1996 00:00:00 4.323 New York Tester
07 David Larry 12.31.1990 00:00:00 02.12.1998 00:00:00 7.898 New York Manager
08 James Cat 09.17.1996 00:00:00 04.15.2002 00:00:00 1.233 Vancouver Tester

Oracle PL/SQL Tutorial  / Null Values

 

  • Veritabanında ki boş değerler bilinmeyen değerler olarak bilinir.
  • Boş değerler bir karakter içermezle.
  • Boş bir değer sütunun değerinin bilinmediği anlamına gelir.

Boş değerleri gösterebilmek için örnek bir tablo üretelim. Tabloya data ekleyelim.

 

drop table Employee;
create table Employee(
ID                 VARCHAR2(4 BYTE)         NOT NULL,
First_Name         VARCHAR2(10 BYTE),
Last_Name          VARCHAR2(10 BYTE),
Start_Date         DATE,
End_Date           DATE,
Salary             Number(8,2),
City               VARCHAR2(10 BYTE),
Description        VARCHAR2(15 BYTE));


insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary,City,Description)
values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer');
insert into Employee(ID,  First_Name, Last_Name, Start_Date,End_Date,Salary,City,Description)
values('02','Alison',   'NULL', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester');
select * from employee;
  • Boş değerler ile boş karakterleri NVL fonksiyonu ile ayırt edebiliriz.

NULL() fonksiyonu değerleri farklı bir değere döndürebilir. NVL() fonksiyonu iki parametre ile çalışır. 1. Parametreye kolon adı girilir. 2. Parametre boş alana yazdırılıcak olan değer girilir.

SELECT id, first_name, last_name, 
NVL(first_name, 'Unknown First Name') last_name_2, End_Date,   nvl(TO_DATE(end_date,'DD/MM/YYYY'),TO_DATE('01/01/1900','DD/MM/YYYY')) End_Date_2 FROM employee;

01    Jason    Martin    Jason    25.07.2006    25.07.0006
02    Alison    NULL    Alison                   01.01.1900

 

Trigger’lar dml (data manupulation language) olarak tanımladığımız. insert, update ve delete ifadelerinden sonra çalıştırılır. Triggerlar tablolar üzerinde oluşturulur.  Sql veya PL / SQL ifadelerinden oluşurlar.

Trigger oluşturan sql ifadeleri

CREATE [OR REPLACE ] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
DECLARE
   Declaration-statements
BEGIN
   Executable-statements
EXCEPTION
   Exception-handling-statements
END;


CREATE [OR REPLACE ] TRIGGER: /*Trigger verilen isimde oluşturlur veya değiştirilir.*/
BEFORE | AFTER | INSTEAD OF: /*Trigger’in ne zaman tetikleneceğini belirlenir.*/
BEFORE: /*Trigger içinde ki işlem tablo üzerinde ki işlemden önce gerçekleşir.*/
AFTER: /*Trigger içinde ki işlem tablo üzerinde ki işlemden sonra gerçekleşir.*/
INSTEAD OF: /*SQL ifadesi yerine Trigger'ın içerisindeki ifadeler çalıştırılır.*/
/*View üzerinde ki işlemlerde, view’ a ulaşmak yerine  içerisinde ki tablo oluşturulur.*/ 
INSERT [OR] | UPDATE [OR] | DELETE:  /*Seçilen DML işlemine göre trigger planlanır.*/
OF: /*Hangi sütunlar için trigger yapılacağı belirlenir.*/
ON: /*Hangi tablo için trigger yapılacağı belirlenir.*/
REFERENCING OLD AS o NEW AS n:  /*n DML sorgularındaki eski ve yeni değerleri verir.*/

Triggerlar procedurlerden farklı şekilde çalışırlar. Trigger oracle tarafından çalıştırılırken, procedure kullanıcı, application veya başka triggerlar tarafından çalıştırılır.

Trigger ile DML ifadeleri kısıtlanabilir. Tek bir trigger ile tabloya kullanıcıları girişi ve yetkisi engellenebilir.

Trigger ile;

  • Sütunlar için otomatik değer üretilir.
  • Loglama yapılabilir, güvenlik katmanı oluşturulabilir.
  • Tablo erişimi ile bilgi toplanır. Tablo eşitleme yapılabilir.
  • Uygun olmayan transactionlar engellenir.

Trigger’ların Kısımları:

 

Bir trigger’ın basitçe 3 tane kısmı vardır.

1-Trigger’ın hangi tablo üzerinde ne zaman çalışacağını gösteren kısım.

2-Trigger kısıtı – Ne zaman tetikleneceğini gösteren kısım.

3-Trigger aksiyonu – Bütün koşullar oluştuğunda trigger’ın hangi işlemleri yapacağını gösteren bölüm.

 

Trigger Örneği Çalışması

Trigger örneğine başlamadan önce ilk olarak üzerine trigger işlemi yaptırabileceğimiz içinde data bulunan bir tablo oluşturalım.

CREATE TABLE URUNLER 
(
URUN_NO INTEGER PRIMARY KEY,
URUN_ADI VARCHAR2 (20),
URUN_ADEDI FLOAT,
URUN_TURU VARCHAR2 (20),
URUN_GRS_TRH DATE
);
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('100','SU','200', 'SIVI', TO_DATE('24/08/2017','DD/MM/YYYY'));
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('101','ÇİKOLATA','500', 'TATLI', TO_DATE('24/08/2017','DD/MM/YYYY'));
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('102','EKMEK','100', 'UNLU MAMULLER', TO_DATE('24/08/2017','DD/MM/YYYY'));
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('103','SALAM','120', 'ET', TO_DATE('24/08/2017','DD/MM/YYYY'));
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('104','BEYAZ PEYNİR','50', 'SÜT', TO_DATE('24/08/2017','DD/MM/YYYY'));
INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('105','SÜT','2000', 'SÜT', TO_DATE('24/08/2017','DD/MM/YYYY'));
COMMIT;
SELECT * FROM URUNLER;

CREATE TABLE TEDARIK 
(
URUN_NO INTEGER PRIMARY KEY,
TEDARIKCI VARCHAR (50),
FOREIGN KEY (URUN_NO) REFERENCES URUNLER (URUN_NO)
); 
INSERT INTO TEDARIK (URUN_NO, TEDARIKCI) VALUES (100, 'SUCU'); COMMIT;  
SELECT * FROM TEDARIK;
  • Tabloya data eklenmesi ile ilgili koşulları gösteren trigger
  • Tablodan kayıt sildirmeyen trigger
    CREATE OR REPLACE TRIGGER TRIG_URUN
       BEFORE DELETE ON URUNLER
       FOR EACH ROW
    DECLARE
    BEGIN
       raise_application_error (-20000,'SILME_YOK : Bu tablodan kayit silemezsiniz...');
    END;
    DELETE FROM URUNLER
    WHERE URUN_NO = '100';
    

  • Tabloya data eklenmesi ile ilgili koşulları gösteren trigger
CREATE OR REPLACE TRIGGER RESTRICT_URUNLER  
BEFORE INSERT OR UPDATE OF URUN_ADEDI ON URUNLER  
FOR EACH ROW  
BEGIN  
IF  (:new.URUN_ADI IN ('SU'))  
AND :new.urun_adedi > 200 THEN  
 RAISE_APPLICATION_ERROR (-20202,  
'su 200 adetten fazla satın alınamaz');  
END IF;  END;

INSERT INTO URUNLER (URUN_NO, URUN_ADI, URUN_ADEDI, URUN_TURU, URUN_GRS_TRH) VALUES ('110','SU','201', 'SIVI', TO_DATE('25/08/2017','DD/MM/YYYY'));

Triggerlar konusunda ilerleyen dönemlerde ki çalışmaları yine bu sayfadan takip edebilirsiniz. 🙂

 

VIEW

Bir veya birden fazla tabloda bulunan verinin özel gösterim şeklidir. Saklanmış sorgular olarakta düşünülebilir. Kısıtlamalar konularakta tablo güvenliği sağlanır.

 

 

VIEW ÇEŞİTLERİ

Viewlar simple ve complex olmak üzere ikiye ayrılırlar. Complex viewlar genellikle join, group by, order by gibi ifadeler içerir.

 

Örnek View Sorgusu

Create or Replace View HREMPANDEP AS
SELECT * FROM HR.EMPLOYEES E LEFT JOIN HR.DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;

 

 WIEW ÜZERİNDE DML İŞLEMLERİ

  • Simple viewlar üzerinde dml işlemeri kolaylıkla yapılabilir.
  • With read only ifadesi üzerinde dml işlemleri yapılamaz.
  • With check option ifadesi üzerinde dml işlemleri yapılabilir

 

View Örneği Çalışması

 

  • Öncelikle içinde data bulunan bir tablo oluşturalım. Tabloya data ekleyelim. Bu tabloladan view oluşturalım.

 

 

 

  • Bu iki tabloyu kullanarak basit ve complex iki tane ayrı view oluşturalım.

 

  • SINIF1AVIEW viewu üzerinde dml (insert, update, delete) işlemleri yapalım.

  • SINIF1AVIEW isimli Viewu’ nu read only yapsaydık dml işlemlerini yapamazdık. View’ u read only yapıp tekrar insert işlemini uyguluyalım.
  • Insert işlemi tekrar yapıldığında aşağıda ki gibi hata geliyor.

 

  • SINIF1AVIEW isimli Viewu’ nu bir koşula göre tekrar oluşturursak aşağıda ki gibi bir sonuç alırız.  SINIF1AVIEW ismli view belirli bir koşula göre oluşturulduğunda  istenilen numaraya (52542) güncelleme  yapmamaktadır.

,

 

 

Bir veritabanı içerisine eklenen verilerin belirli kurallar çerçevesinde bütünlüğünün, tutarlılığının sağlanıp saklanabilmesi için kullanılır.  Oracle’ ın sağlamış olduğu constraints (kısıtlayıcılar) sayesinde veriler tutarlı olarak saklanabilir.

Başlıca constraint (kısıtlayıcı) yapıları:

  • Primary Key Constraint
  • Foreign Key Constraint
  • Check Constraint
  • Unıque Constraint
  • Not Null Constraint

Constraint yapıları sistem tarafından veya kullanıcı tarafından tanımlanabilir.

The Not Null Constraint

  Boş bırakılamaz anlamına gelen, Not Null kıstlayıcısı  hangi kolonlara tanımlandıysa o kolonda ki satırlar null (boş) değerler alamaz.

Aşağıda bir okula ait  öğrencilerin bilgilerini içeren örnek bir veritabanı oluşturalım.

  • 1 – A sınıfında okuyan öğrencilerin bilgilerini sakladığımız “sınıf1a” tablosunu oluşturalım.

sınıf1a tablosunda sistem tarafından veya kullanıcı tarafından atanan not null constraint yapısını görebiliriz.

The Unique Constraint

   Bir tabloda ki primary key tanımlı kolonlar hariç, diğer kolonlara unique constraint tanımlanabilir. Bu kolonlarda primary key tanımlı kolonlar gibi tekilleştirici, özgülleştirici kolonlardır.

  • Unique constraint tanımlı kolonlar null (boş) bırakılabilir.
  • Unique constraint tanımlı kolonlara aynı değerin atanmasına izin verilmez.

Bu sefer aşağıda sınıf1a tablosunda  email sütunu için unique constraint oluşturalım. Tabloya eklenen değerlere dikkat edildiğinde email sütununa null (boş) değer eklenebilmektir. Aynı isimde veri eklenenemez, tekil olmak zorunda.

The Primary Key Constraint

     Bir kolona primary key kısıtlayıcısının atanması o kolonun benzersiz, tekil ve özgül olduğunun ifadesidir.

  • Primary key constraint tanımlı kolona  asla null (boş) değer atanamaz.
  • Primary key constraint tanımlı kolona aynı değerin atanmasına izin verilmez.

The Check Constraint

    Check constraints ile sütunlara belirli kurallar konabilir. Şimdi yukarıda vermiş olduğumuz örneği primary key ve check constraint ile derleyip tekrar oluşturalım.

   İlk olarak primary key ve check constraint ekleyerek tabloyu tekrar create edelim. Primary key oluşturma şeklini iki ayrı  şekilde gösterebiliriz.

Şimdi oluşturduğumuz tabloya veri ekleyebiliriz.

The Foreign Key Constraint

   Foreign key bir tabloda ki kolon ile ilişkili olduğu tabloda ki kolondan geldiğini doğrulamak için kullanılan kısıttır.

   Aşağıda örnek  olarak “tumokul” isimli yeni bir tablo oluşturalım. Bu tabloda okulda ki tüm öğrencilerin bilgileri tutulacak. Daha sonra bu  tabloya veri ekleyelim.

   Şimdi “sinif1a” isimli tabloya “tümokul” tablosunda ki okul_numara sütununu foreign key olarak tanımlayalım. “tümokul” tablosunu referans gösterelim. Foreign key constraint yapısını iki şekilde oluşturabiliriz. Aşağıda iki farklı şekilde nasıl oluştuğu gösterilmektedir.

   Foreign key yapısını tanımladıktan sonra, “sınıf1a” tablosunda veri ekleyelim. Daha sonra “sınıf1a” tablosu ile ilişkilendirdiğimiz “tümokul” tablosunu inner join bağlantı yöntemi ile birbirine bağlayarak oluşturduğumuz datayı görelim.

Böylece oracle server üzerinde ki constraint yapılarını tamamlamış olduk. Oracle server aracılığı ile bir başka sql çalışmasında görüşmek üzere…  🙂

Kısa adıyla DML olan   veri manipulasyonu sql dili, veritabanı üzerinde ki tablolarda satır eklemesi, güncellemesi veya silinmesi işlemlemlerinde kullanılan dildir. Data manipulation language  içinde tanımlı sql ifadeler aşağıda ki gibidir.

INSERT (Ekle)

UPDATE(Güncelle)

DELETE(Sil)

MERGE(Birleştir)

Şimdi DML ifadelerini inceleyelim.

INSERT STATEMENT

Insert ifadesi tablolara yeni bir satır eklenirken kullanılır. Insert cümlesi aşağıdaki yapıda oluşturulur.

INSERT INTO  table [(column [, column…])]

VALUES  (value [, value…]);

*Bu sql cümlesi ile tabloya sadece 1 satır eklenebilir.

Örnek: Departments tablosuna yeni bir department_id ve bu department_id ye ait bilgiler içeren kolonu ekleyelim.

  • Insert cümlelerinde herbir kolon için ayrı değer girilir.
  • Insert cümlesinde sıra ile eklenen değerler. Tabloda  ki kolonların sırasına göredir.
  • Tarih veya karakter tipinde kolonlar için eklenen tarih veya karakter verisi tırnak içinde yazılmalıdır

Insert işleminde 2 farkı ekleme yöntemi vardır;

Implicit Method:

Tablo içinde ki belirtilen kolonlara ekleme yapılır diğer kolonlar dahil edilmez.

Örnek: Departments tablosuna yeni bir department_id ve bu department_id ye ait department_name  kolonlarına yeni bir veri ekleyelim.

 

 

Explicit Method:

Açık yöntem olarak bilinir. Değer girilecek cümleler belirlenir, diğerlerine null  verilir.

Örnek: Departments tablosuna yeni bir department_id ve bu department_id ye ait department_name  kolonlarına yeni bir veri ekleyelim. Tabloda ki diğer kolonlara NULL verebiliriz. Burada tüm kolonları yazmadan direk HR.DEPARTMENTS tablosunu çağırabiliriz.

 

  • Oracle sql içinde bulunan fonksiyonlar ile  kayıtlar eklenebilir.

 

UPDATE STATEMENT

Update cümlesi satırlarda ki verilerde değişiklikler yapılabilir.  Update cümlesi  aşağıda ki  yapıda oluşturulur.

 

UPDATE table   — Update edilecek table
SET column = value [, column = value, …]   — Değeri değişecek olan kolon
[WHERE condition];   — Hangi  satırın değerinin değişeceği bu  satırda belirlenir.

Örnek:  Employees tablosunda 207 numaralı employee_id nin department_id sine yeni bir değer verelim.

 

DELETE STATEMENT

Tabloda satır silineceği zaman delete cümlesi kullanılır. Delete cümlesi aşağıda ki yapıda oluşturulur.

DELETE [FROM]    table

[WHERE    condition];

 

Data manipulation language cümlelerini bu şekilde tamamlamış olduk….ç

 

 

 

 

 

 

 

 

 

 

Oracle data integrator etl aracının kurulumundan sonra Odi’ nin temel yapısını inceleyelim. İlk olarak Oracle data integrator ile etl çalışmaları yapabileceğimiz master ve work repository yapılarını kuracağız. Daha sonra  veri ambarı yapılarına OLTP (On Line Transactional Processing) server sistemleri içinde ki ilişkili veritabanlarından hedef tabloları veri taşıma işlemlerini etl aracı olan odi ile yapacağız. Oracle data integrator’ ı tanımaya başlayabiliriz.

Oracle Data Intagrator

Kısa adıyla odi  farklı kaynak sistemlerden (Microsoft, oracle vb.) hedef tablolara veri aktarımını sağlar. Bu veri taşıma işlemleri arka planda sql kodları ile çalışmaktadır. Burada kaynak sistemlerden veri taşıma, dönüştürme ve yükleme işlemleri odi aracı ile ile yüksek performans ile çalışmakta kullanıcılar için kolaylık sağlamaktadır. Oracle  data integrator aracının kullanım kolaylığı ve tasarımı da tercih edilme sebebi doğurmaktadır. Diğer etl (ssis, informatica, sap bw) araçlarına göre arasında farklılıklar olabilir bu konuyu başka bir yazımızda inceleyebiliriz.

Oracle data integrator aracını ilk açtığımızda görünüm ve tasarım açısından sade  bir yapı ile karşılaşacağız. İlk açılışta karşımıza 4 adet designer, operator, topoloji yöneticisi ve güvenlik yöneticisi modülleri  çıkacak.

Designer: Veri transformasyonu ve veri bütünlüğü ile ilgili bildirimler tanımlanır. Veritabanı ve metadata uygulamaları ile ilgili geliştirmeler bu kısımda yapılır. Designer modülünde metadata kullanılır ve oluşan veri ile ilgili  senaryolar, yükleme planları bu modülde yapılır. Bu modül daha çok geliştirmeciler ve metadata yöneticileri tarafından kullanılır.

Operator: Ortaya çıkan oluşan veri ile ilgili verinin oluşma süreçleri takibi ve yönetimi bu modülde incelenir. Verinin oluşumu süresinde ki hatalar adım adım takip edilir, çalışma süreci izlenebilir. Verinin oluşumu sırasında geliştirmeciler tarafından farkedilen hatalar çalışma durdurulup çözümlenebilir.

Topology: Fiziksel ve mantıksal mimari altyapısı bu modülde oluşturulur. Bu modül ile veri altyapısı serverlar, veritabanı şemaları ve agent lar yönetilir.

Security: Kullanıcı profilleri roller ve özellikleri yönetilir. Bu modülde ayrıca nesnelere yetki ve erişimler sağlanır.

Agents: Agent bir çalıştırma aracıdır. Oracle data integrator da çalışan her bir senaryo agent aracılığı ile koordine edilir. Odi arka planında çalışan kodların geri çağrılmasını sağlar.

 

Repository

Depo veya havuz alanı gibide düşünülebilir. Repository master ve work repository olmak üzere ikiye ayrılır. Repository içinde farklı kaynak teknolojiere ait (Oracle, Microsoft, Ibm, Mysql) ait ilişkili veritabanı yönetim sistemleri içinde saklanan tablo kümeleri bulunmaktadır.

Master Repository

Oracle data integrator ürününde master repository  kullanıcı profilleri, roller ve ayrıcalıklara ait güvenlik bilgilerini, topology bilgilerini, tüm versiyonlara ait kaynak kodları içermektedir.

Work Repository

Yapılan projelere ait tüm nesneler, geliştirmeler, kalite değerlendirme ve canlı ortamlar work repository de saklanır. Work repository de saklanan bilgiler;

Models

Veri kümeleri, kolonlar, veri bütünlüğü kısıtlayıcıları, veri kaynakları ve analizler

Projects

Mappingler, paketler, prosedürler, dosyalar, bilgi modülleri ve değişkenler

Runtime Information

Senaryolar, planlar, planlanmış bilgiler ve çalıştırma kayıtları

Master Repository Oluşturma

Oracle Data integrator içinde master repository kurmak için öncelikle toad üzerinde master ve work  repositorye ait kullanıcı adı oluşturmamız gereklidir. Ben ODIM ve ODIW adında bir kullanıcı ismi oluşturdum. Daha sonra bir önceki yazıda kurulumunu gösterdiğim oracle data integratorı açalım.

 

Oracle data integrator açılış sayfasında sol üst köşedeki  Designer modülünün üzerinde kalan yıldızlı sayfa simgesini açıyoruz. Karşımıza new galery pencerisi açılacak. Master repository creation wizard sekmesini seçip ok verelim.

 

Açılan Master repository creation wizard penceresinin ilk adımınında, technology ve jdbc driver kısımları aynı kalacak. Jdbc url kısmını resimde ki gibi dolduracağız. User: ODIM, Password:ODIM olacak. Bu kullanıcıyı biraz önce toadda oluşturmuştuk. DBA User: Toad’da şemanıza bağlanırken oluşturulan kullanıcı adı, DBA Password:Toad’da şemanıza bağlanırken oluşturulan şifreniz olacak. Bu kısımları resimde ki gibi doldurabilirsiniz.

Bu kısımda başarılı sonucunu aldıktan sonra next ile 2. adıma geçiyoruz. 2. adımda  Use Odi Authentication seçili olacak. Supervisor User otomatik olarak verildi. Şifre 6 karakter olmak zorunda. Ben Password:123456 verdim. Confirm Password de aynısı olacak.

Next ile 3. adıma geçiyoruz. Bu kısımda bir şey yapılmayacak. Next ile geçip bitirebeliriz. Master repository oluşmaya başlayacaktır. Master repository oluştu bildirimini gördükten sonra master repositorye bağlanıp work repositoryi oluşturalım.

 

Master repository oluştu.  Şimdi oracle data integrator açlış sayfasında ki Connect To Repository sekmesini açalım. Açılan login penceresinden yeşil renkli artı sekmesini açıp repository connection information penceresini dolduracağız. Login Name kısmını kedimiz belirliyoruz. Ben ODIM ismini verdim. User ve Password kısımların az önce oluşturduk. Ben Password:123456 vermiştim. Database Connection alanında toadda master repository için oluşturduğumuz kullanıcı adı: ODIM ve şifresini:ODIM veriyoruz. Driver List: Oracle Jdbc Driver olacak. Url kısmında yanda ki büyüteçe tıklayıp pencere açıldığında Ok ile kapatalım. Kapattığımızda otomatik olarak host cümleciği gelecek. Bu kısımları resimde ki gibi doldurabiliriz. Daha sonra Test ile connection bilgilerini kontrol edebiliriz. Ok’ e basarak bitirelim.

Ok’ e bastığım da aşağıda ki  resimde ki gibi  login penceresi tekrar açılacak. Master repositorye bağlanabiliriz.

Work Repository Oluşturma

Work repository için ilk olarak master repository bağlanıyoruz. Bağlandıktan sonra topology modülünde en altta ki sekmede work repository var. Work repository üzerine gelip sağ click yaparak new work repository seçiyoruz. Açılan pencerenin ilk adımında Technology, JDBC Driver, JDBC Url bölümleri otomatik olarak dolu gelecek. User ve password bölümlerini toadda work repository için oluşturduğumuz kullanıcı adı ve şifresini veriyoruz. User: ODIW Password: ODIW. Next ile 2. adıma geçebiliriz.

Devam ettiğimizde açılan pencerede id:1 olarak kalsın. Name kısmına oluşturmak istediğimiz work repositorynin adını veriyoruz. Ben WORKREPO verdim. Work Repository Type: Development kalsın. Development seçili olduğunda sadece work repository de geliştirmeleri yapabiliyor olacağız. Execution seçili olursa canlı ortama geçilmiş olur bu ortamda geliştirme olmaz sadece yapılmış olan interfaceler çalıştırılır. Diğer kısımlara dokunmadan finish ile bitirebiliriz. Work repository oluşmadan önce karşınıza bir pencere çıkacak. Karşınıza çıkan soru, work repositoryi oluşturmak istiyor musunuz? olucak buna Ok demeyelim. No verirsek ODIM login ismi ile work repositoryi default göstererek  bağlanabileceğiz.

Şimdi master repositoryden disconnect olup tekrar bağlanalım.

Şimdi master repository login penceresini Connect To Repository sekmesine tıklayarak açalım.  Karşımıza Oracle Data Integrator Login penceresi açılacak. Yeşil renkli artı simgesinin yanında ki kalem simgesini tıklayarak açalım. Aslında burada tüm bilgiler otomatik olarak geldi. Sadece değişecek olan tek bir kısım var. 3. başlık olan Work Repository bölümünde work repository seçili olacak. Work repositorynin yanında ki büyüteçten oluşturmuş olduğumuz WORKREP seçeneğini seçelim. Son olara Default Connection seçili olsun.  Diğer kısımlar master repository de doldurduğumuz şekilde ki gibi kalacak. Test ile work repositoryi doğru oluşturduğumuzu test edebiliriz.

Artık otomatik olarak açılan ODIM login penceresinden work repositorye otomatik olarak bağlanabiliriz.

 

Bu adımla beraber oracle data integrator ile development aşamasının ön hazırlığını oluşturan kısımların bir kısmını bitirmiş olduk. Development’ tan önceki kalan ön hazırlıkları sonraki yazıda takip edebilirsiniz.

 

 

 

Oracle teknolojisinin  ETL (Extract – Tranform – Loading) işlemler için kullanılan   Oracle Data Intagrator 11g programının kurulumunu yapacağız.

İlk kurmaya çalıştığım zamanlarda bana zor gelmişti, hatta kuramamıştım. 🙂 Daha sonra tekrar deneye deneye programı kurabildim. 🙂

Kurulum  aşamasında bize lazım olacak iki setup dosyası gerekiyor.

  •  Odi’ yi kurmadan  önce  Java Jdk  kurulu olmalı. Bilgisayarınızda nereye kurduğunuzu unutmayın.  Çünkü Odi kurulurken, Java Jdk’nın yerini göstermemiz gerekiyor.
  • Bilgisayarınızda JDK kurulu ise direk Odi’nin kurulumuna geçebilirsiniz.

Jdk ve Odi’ ye ait indirebileceğiniz adres olarak Oracle’ ın kendi sitesinden bulabilirsiniz.

 

Odi Kurulum:

Başlangıç için özet olarak yapacağımız adımları bu resimde paylaşmaya çalıştım.

 

İlk olarak Odi’ yi indirip dosyayı açtığımızda setup1 ve setup2 dosyasını göreceğiz. Resimde görüldüğü gibi setup2 dosyasını setup1 içine koyuyoruz.

 

Disk 2 yi disk1 içine koyduktan sonra, resimde ki adımlara göre Disk 1 içinde Install dosyasını açıyoruz. Install dosyası içinde benim bilgisayarım 64 bit olduğu için win64 dosyasını açıyoruz. Win 64 dosyasında bulunan setup kısmından kurulumu başlatıyoruz.

 

Setup’ı çalıştırdıktan yaklaşık 1 dk. sonra Oracle Universal Installer siyah ekranı açılacak. Bu kısımda yazının başında bahsettiğim, bilgisayarımızda kurulu olan Java JDK’ nın kurulu olduğu yeri siyah ekrana yapıştıracağız. Yolu gösterdikten sonra Enter click yaptığımız da Odi kurulum dosyası açılmış olacak. Bu adımdan sonra zor kısmı atlatmış oluyoruz. 🙂

 

Kurulum aşamasında açılan ilk ekranı görmüş olacağız. Bu adımı skip software işaretli olacak şekilde Next ile geçebiliriz.

 

Bu adımda Odi Studio (with local agent), Standalone Installation seçenekleri seçili şekilde next ile devam ediyoruz.

 

Bu adımda otomatik olarak yüklemeler yapıldıktan sonra next ile devam edebiliriz.

 

Bu kısımı özel olarak paylaştım. En başta disk2 yi dik1 içine kopyalamıştık. Kopyalama unutulabilir veya kopyalamadan kurulumada başlamış olabilirsiniz. Bu durumda bu adıma geldiğinizde direk atlayamıyorsunuz. Bilgisayarınızda Odi2 diskinin yerini göstermeniz gerekmektedir. Bunu gösterdikten sonra next ile devam edebilirsiniz. Disk2 yi disk1 içine en başta kopyalarsanız, bu adımı direk atlamış olacaksınız. 🙂

 

Bu kısımı Skip Repository Configuration yaparak geçebiliriz.

 

Bu kısımda Agent Name alanına localagent ve Agent Port alanına 20910 yazarak geçiyoruz.

 

Bu adımda 2. seçeneği seçiyoruz. Next yapıyoruz. Bir uyarı çıkacak buna Yes diyebiliriz. Daha sonra next ile devam edelim.

 

Açılan son pencereyide install ile geçiyoruz.

 

Son adıma geçildiğin de kurulum başlayacak ve otomatik olarak bitecektir.

Oracle Data Integrator 11g ürününü bilgisayarımıza kurmuş oluyoruz.  Odi’ yi açtığımızda karşımıza gelen pencere ile tanışalım.

 

Artık Etl işlemlerimiz için Odi’ yi kullanabilir. Veri ambarı için geliştirmeler yapabiliriz.  Etl için sadece kurulumlar yetmiyor. Bir sonraki yazıda etl geliştirmeleri yapabilmek için work repository çalışma ortamı ve üzerinde çalışcağımız database şemasını oluşturduğumuz master repository ortamlarını kurabiliriz. 🙂

 

Görüşmek üzere… 🙂

 

 

Sql Server Integration Service üzerinde Pivot ve Unpivot bileşenlerini kullanarak, satırları sütunlara ve sütunları tekrar satırlara çevirebileceğiz. Kullandığımız tabloları daha  özet ve gruplanmış halde görmüş olacağız.

Devamını Oku