Oracle Quick SQL Platform

Herkese Selam,

Bu yazıda sizlere Oracle’ın  Qucik SQL Platformundan bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

SQL yazması çok kolay ve insan diline en yakın olması sebebi ile belkide öğrenilmesi ve kodlaması en kolay dillerin belkide başında yer almaktadır. Oracle Quick SQL Platformu ile SQL dilinin doğasında olan bu kolaylığı bir tık daha ileriye taşıyarak çok daha basit bir notasyon ile SQL üreten eden bir yazılım kullanıma açmış durumda. Ben ilk testimde oldukça faydalı olduğunu buldum ve bir kaç deneme yaptıktan sonra oldukça kullanışlı olabileceği kanısındayım. Bu platformun en güzel özelliklerinden biride yazacağınız kurallar çerçevesinde veritabanına insert edilebilecek formatta test datası da üretebiliyor olması.

Bu platformun kullanabilmek için bir Oracle hesabınızın olması yeterli. Eğer bir Oracle hesabınız yok ise linki takip ederek bir Oracle hesabı edinebilirsiniz.

Oracle Quick SQL Platformuna nasıl bir input vererek, nasıl bir çıktı elde edebildiğimiz konusunda hızlı bir fikir vermesi adına bir örnek yapalım.

Yazının başında da söylediğim gibi Oracle’ın belirlemiş olduğu bir notasyon söz konusu, bu notasyonun nasıl olduğuna ortama girdikten sonra menüler aracılığı ile ulaşabilirsiniz. (Oracle Quick SQL Platformuna giriş linkini yazının sonunda paylaşacağım.)

Platforma Verediğimiz Input
departments /insert 4 
   name /nn 
   location 
   employees /insert 1 
      name /nn vc50 
      email /lower 
      cost center num 
      date hired 
      job 
Platformun Ürettiği Çıktı
-- create tables
create table DEPARTMENTS (
    ID               NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY  
                     constraint DEPARTMENTS_ID_PK primary key,
    NAME             VARCHAR2(255) not null,
    LOCATION         VARCHAR2(4000)
)
;

create table EMPLOYEES (
    ID                 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY  
                       constraint EMPLOYEES_ID_PK primary key,
    DEPARTMENT_ID      NUMBER
                       constraint EMPLOYEES_DEPARTMENT_ID_FK
                       references DEPARTMENTS on delete cascade,
    NAME               VARCHAR2(50) not null,
    EMAIL              VARCHAR2(255),
    COST_CENTER        NUMBER,
    DATE_HIRED         DATE,
    JOB                VARCHAR2(4000)
)
;


-- triggers
create or replace trigger EMPLOYEES_BIU
    before insert or update 
    on EMPLOYEES
    for each row
begin
    :new.EMAIL := LOWER(:new.EMAIL);
end;
/


-- indexes
create index EMPLOYEES_i1 on EMPLOYEES (DEPARTMENT_ID);
insert into DEPARTMENTS (
    ID,
    NAME,
    LOCATION
) values (
    1,
    'Customer Satisfaction',
    'Tanquecitos'
);

insert into DEPARTMENTS (
    ID,
    NAME,
    LOCATION
) values (
    2,
    'Finance',
    'Sugarloaf'
);

insert into DEPARTMENTS (
    ID,
    NAME,
    LOCATION
) values (
    3,
    'Office of the CEO',
    'Dale City'
);

insert into DEPARTMENTS (
    ID,
    NAME,
    LOCATION
) values (
    4,
    'Health',
    'Grosvenor'
);

-- load data
insert into EMPLOYEES (
    ID,
    DEPARTMENT_ID,
    NAME,
    EMAIL,
    COST_CENTER,
    DATE_HIRED,
    JOB
) values (
    1,
    3,
    'Gricelda Luebbers',
    'gricelda.luebbers@aaab.com',
    82,
    sysdate - 55,
    'Systems Software Engineer'
);

Platform ile neler yapılabileceğini daha hızlı ve net anlayabilmek için aşağıdaki kısa videoyuda izlemenizi öneriyorum.

Bu platform oldukça pratik bir şekilde SQL ve test datası üretmemize olanak sağlayarak geliştiricilere hız kazandıracak. Oracle Quick SQL Platformuna linki takip ederek ulaşabilirsiniz.

ORACLE QUICK SQL PLATFORM

Posted in Uncategorized | Tagged , , , | Leave a comment

Obje İsimlendirmede Önemli Kural Değişimi

Herkese Selam,

Kısa bir süre önce Oracle 12c Release 2  son kullanıcıların kullanımına açıldı. Nasıl temin edileceği ile ilgili detay bilgi için linki takip edebilirsiniz. Bu yazıda Oracle 12c Release 2 ile obje isimlendirme standartlarında yapılan önemli kural değişikliğinden bahsedeceğim umarım farkındalık anlamında faydalı olur.

Oracle DB üzerinde geliştirme yaparken sık yaşadığımız problemlerden biri de obje isimlendirme konusundaki 30 Byte (30 karakter olarak bilinir.) limit idi.  Obje isimleri, objeler hakkında en önemli fikri veren belirteçler olmasına rağmen çoğu zaman bu karakter limiti yüzünden yeterince açık obje isimleri veremeyebiliyorduk. Bu durum obje isimlendirme limiti Oracle’dan daha büyük olan veritabanlarından obje (tablo-view …) taşıma söz konusu olduğunda daha da eziyetli bir hal alabiliyordu.

Oracle 12c Release 2 ile beraber Objelere verilecek isim limiti çok büyük bir değişiklik ile  30 Byte’dan 128 Byte’a (1 byte’lık karakterler kullanmamız durumunda 128 karakter) çıkarıldı.

Şimdi Oracle 12c R2’den önce durumun ne olduğuna bir bakalım.

CREATE TABLE SATIS_YENI_DONUSUM_RAPORLARI_2016
(
   DONEM       NUMBER,
   URUN_KODU   NUMBER,
   TUTAR       NUMBER
);

ORA-00972: identifier is too long

CREATE TABLE SATIS_YENI
(
   DONEM_DONEM_DONEM_DONEM_DONEM_DONEM   NUMBER,
   URUN_KODU                             NUMBER,
   TUTAR                                 NUMBER
);

ORA-00972: identifier is too long

Görüldüğü üzere ilk örnekte tablo adını, ikinci örnekte ise kolon adını 30 karakter limitinin üzerinde verdim. İki durumda da aynı hatayı alarak işlemimi gerçekleştiremedim.

Şimdi yeni güncelleme ile neler yapabileceğimizi görelim.

CREATE TABLE SATIS_YENI_DONUSUM_RAPORLARI_2016
(
   DONEM_DONEM_DONEM_DONEM_DONEM_DONEM                           NUMBER,
   URUN_KODU_URUN_KODU_URUN_KODU_URUN_KODU_URUN_KODU_URUN_KODU   NUMBER,
   TUTAR_TUTAR_TUTAR_TUTAR_TUTAR_TUTAR                           NUMBER
);

Table SATIS_YENI_DONUSUM_RAPORLARI_2016 created.

SELECT * FROM SATIS_YENI_DONUSUM_RAPORLARI_2016;


CREATE VIEW VW_SATIS_YENI_DONUSUM_RAPORLARI_2016
AS
   SELECT 1 TEST FROM DUAL;

VIEW VW_SATIS_YENI_DONUSUM_RAPORLARI_2016 created.

Evet görüldüğü üzere objelerimin isimlerini verirken 128 karaktere kadar herhangi bir sorun yaşamayarak yeterli uzunlukta obje isimlendirmelerimi yapabildim.

Yapılan bu değişiklik ile, isimlendirme sebebiyle yaşadığımız problemlerin (hem migration projelerinde hemde anlaşılır obje isimleri vermede) ortadan kalktığını düşünüyorum.

Posted in Oracle, Uncategorized | Tagged , , , , , , | Leave a comment

Oracle Database 12c Release 2 Kullanıma Hazır

Herkese Selam,

imagesUzun süredir beklenen haber Oracle tarafından duyuruldu. İlk etapta Oracle Cloud ve LiveSQL platformunda kullanıcı ile buluşan Oracle 12c R2 artık  Linux ve Solaris işletim sistemleri için indirilebilir olarakta yayınlandı. Aşağıdaki link üzerinden Oracle 12c R2’yi download edip Linux veya Solaris makinelerinize kurabilirsiniz.

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

Oracle, 12c R2’nin download edilebilir halinin yayınlanması akabinde, bu yazılımın ve içerisinde bir çok Oracle developement ürününde var olduğu yeni bir Virtual Machine Appliance’ıda kullanıcılara sundu. Bu sanal makineyi indirip virtualbox’da ayağa kaldırarak Oracle 12c R2’ye hızlı bir giriş yapabilirsiniz. Bu Sanal makineyi aşağıdaki link aracılığı ile edinebilirsiniz.

http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html

Buna ek olarak Oracle 12c R2 ile beraber gelen yeni özelliklere de aşağıdaki linkler üzerinden erişip kendi kuracağınız ortamlarda deneyip test edebilirsiniz.

https://docs.oracle.com/database/122/

https://blogs.oracle.com/sql/entry/12_things_developers_will_love

Posted in Oracle | Tagged , , | 1 Comment

Veri Tipi Çevrimlerinin Kontrollü Yapılması

Herkese Selam,
Bu yazıda sizlere Oracle 12c Release 2 ile beraber SQL tarafında yeni gelen bir fonksiyondan bahsedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle 12c Release 2 ile beraber gelen yeni özelliklerin bazılarını linkteki yazıda paylaşmıştım. Şimdi bu özelliklerden biri olan cast fonksiyonunun yeni özelliklerindenne işe yaradığından ve nasıl kullanıldığını göstereceğim.

cloudÖncelikle şunu belirtmeliyim ki, Oracle 12c Release 2 hala download edilebilir formatta Oracle tarafından yayınlanmadı. Dolayısıyla bu ve yeni gelen özellikleri kendi lokal makinenize indirip test yapamayacağız. Bu durumda elimizde bu özellikleri test edebileceğimiz iki seçenek mevcut bunlardan birincisi Oracle Public Cloud üzerinden başvuruda bulunup, akabinde bir cloud hesap edinip burada denemek (Nasıl yapılacağını linki takip ederek öğrenebilirsiniz).

livesqlİkinci yöntem ise Oracle’ın Live SQL platformu üzerinden testleri yapmak (LiveSQL ile ilgili bilgiye linkten erişebilirsiniz.). Hem Oracle Public Cloud’da hemde Oracle LiveSQL Platformunda Oracle 12c Release 2 kurulu durumda. Ben bu yöntemlerden erişimi ve elde edilmesi daha kolay olan LiveSQL platformu tercih ettim. Sizde benzer bir tercih ile testlerinizi kolayca yapabilirsiniz.

Cast fonksiyonu bir çoğumuzun da bildiği üzere veri tipleri arasında dönüşüm yapmaya yarayan bir SQL fonksiyonu. Bu fonksiyon built-in veya collection-typed veri tiplerinden başka bir built-in veya collection-typed veri tiplerine tip dönüşümü yapabilmektedir. Kısaca nasıl çalıştığını hatırlayalım.

SELECT CAST ('123456' AS NUMBER) + 5 FROM DUAL;

CAST('123456'ASNUMBER)+5
------------------------
                  123461

SELECT CAST ('10.10.2017' AS DATE) + 5 FROM DUAL;

CAST('10.10.2017'ASDATE)+5
--------------------------
15/10/2017   

SELECT CAST (SYSDATE AS TIMESTAMP) FROM DUAL;

CAST(SYSDATEASTIMESTAMP)                          
--------------------------------------------------
14/2/2017 08:21:59,000000     

Evet fonskiyonun nasıl çalıştığını hatırladık ancak CAST fonksiyonuna 12c R2 öncesinde çevrim yapılamayacak veri tipleri gönderildiğinde fonksiyon hata alıyor ve program sonlanıyordu.

SELECT CAST ('sdfsj343' AS NUMBER) FROM DUAL; 
ORA-01722: invalid number

SELECT CAST ('7878987' AS DATE) castdate FROM DUAL;
ORA-01847: day of month must be between 1 and last day of month

Bu tarz hatalar uzun kod bloklarımız içerisinde işlediğimiz veri miktarına göre karşılaşma sıklığımızın oldukça fazla olduğu hata türlerinden. Özellikle Data Quality problemlerinin sık yaşandığı sistemlerde bu tarz problemler ile bir hayli karşılaşabiliyoruz. Oracle 12c R2 ile beraber bu fonksiyonu kullanırken olası tip uyumsuzlukları sonucunda oluşacak problemleri handle edecek bir mekanizma fonksiyona eklendi. Bu mekanizma ile beraber tip dönüşümlerinde alınacak hataları azaltma veya tamamen ortadan kaldırma adına bize yeni bir opsiyon sunulmuş olundu. Şimdi nasıl çalıştığına bakalım.

SELECT CAST ('fsweereg' AS DATE default sysdate on conversion error)
castdate1 from dual;

SELECT CAST ('fsweereg' AS DATE default '10-10-2017' on 
conversion error, 'DD-MM-YYYY') castdate2 from dual;

SELECT CAST ('fsdfs34' AS NUMBER default -99 on conversion error) 
castnumber from dual;

resultset

 

Örneklerden de görüleceği üzere olası bir hatalı çevrim durumunda default değerler tanımlayarak fonksiyonun kontrollü bir şekilde yoluna devam etmesini sağlayabiliyoruz.  Bu fonksiyon ile beraber gelen conversion error cümlesi to_number, to_date gibi diğer casting fonksiyonlarında da kullanılabilmektedir.

select to_number('32423fsfs'  default -99 on conversion error)
castdate from dual;

select to_date('32423fsfs'  default sysdate on conversion error)
castdate from dual;

select to_date('32423fsfs'  default '10-10-2017' on conversion error
, 'DD-MM-YYYY') castdate from dual;resultset2

 

Gelen bu özellik, SQL ve PL/SQL kod blokları içerisinde veri tipi dönüşümleri için yazdığımız kodların karmaşıklığını azaltıp uygulama performansımızı bu noktada arttıracağı kanısındayım. Veri tipi dönüşümünün kontrollü yapılabilmesi için native bir kod desteği gelmesi bu bağlamda oldukça önemli bir gelişme oldu.

KAYNAKLAR

https://docs.oracle.com/database/122/whatsnew.htm

Posted in Oracle, Uncategorized | Tagged , , , , , , | Leave a comment

VALIDATE_CONVERSION FUNCTION

Herkese Selam,
Bu yazıda sizlere Oracle 12c Release 2 ile beraber SQL tarafında yeni gelen bir fonksiyondan bahsedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle 12c Release 2 ile beraber gelen yeni özelliklerin bazılarını linkteki yazıda paylaşmıştım. Şimdi bu özelliklerden biri olan validate_conversion özelliğinin ne işe yaradığından ve nasıl kullanıldığını göstereceğim.

cloudÖncelikle şunu belirtmeliyim ki, Oracle 12c Release 2 hala download edilebilir formatta Oracle tarafından yayınlanmadı. Dolayısıyla bu ve yeni gelen özellikleri kendi lokal makinenize indirip test yapamayacağız. Bu durumda elimizde bu özellikleri test edebileceğimiz iki seçenek mevcut bunlardan birincisi Oracle Public Cloud üzerinden başvuruda bulunup, akabinde bir cloud hesap edinip burada denemek (Nasıl yapılacağını linki takip ederek öğrenebilirsiniz).

livesqlİkinci yöntem ise Oracle’ın Live SQL platformu üzerinden testleri yapmak (LiveSQL ile ilgili bilgiye linkten erişebilirsiniz.). Hem Oracle Public Cloud’da hemde Oracle LiveSQL Platformunda Oracle 12c Release 2 kurulu durumda. Ben bu yöntemlerden erişimi ve elde edilmesi daha kolay olan LiveSQL platformu tercih ettim. Sizde benzer bir tercih ile testlerinizi kolayca yapabilirsiniz.

Şimdi validate_conversion fonksiyonunu açıklamaya başlayalım.
Yazdığımız SQL ve PL/SQL kodlarında veri tipi çevirim problemleri ile sıkça karşılaşmaktayız. Bu tarz durumlar ile karşılaştığımızda çoğu zaman uygulamamız crash alıp kontrolsüz bir şekilde sonlanabiliyor. Yeni gelen bu fonksiyon tam olarak ta veri tipi çevirimleri problemleri yaşadığımız noktada yardımımıza koşmakta. Fonksiyonun çalışma mantığı aslında oldukça basit. Fonksiyona verdiğimiz parametrenin yine verdiğimiz veri tipine dönüşüp dönüşemeyeceğini test edip geriye 1 veya 0 döndürüyor. Eğer gönderdiğimiz parametrelere ilişkin dönüşüm yapılabiliyorsa sonuç 1 olarak geri dönüyor. Eğer dönüşüm yapılamıyorsa sonuç 0 olarak geri dönüyor. validate_conversion fonksiyonunu aşağıdaki veri tipi dönüşümlerini test etmek için kullanabiliyoruz.

  • number
  • date
  • timestamp
  • timestamp with time zone
  • binary_float
  • binary_double
  • interval day to second
  • interval year to month

Şimdi nasıl kullanıldığı ile ilgili çeşitli örnekler yapalım.

select validate_conversion('test123' as number)                 test1 from dual;--0 
select validate_conversion(300 as number)                       test2 from dual;--1
select validate_conversion('01012017' as date,'mmddyyyy')       test3 from dual;--1
select validate_conversion('31012017' as date,'mmddyyyy')       test4 from dual;--0
select validate_conversion('31-jan-2017' as date,'dd-mon-yyyy') test5 from dual;--1

validate_conversion

Şimdi daha farklı kullanım şekillerine bakalım;

SELECT *
FROM hr.employees emp
WHERE VALIDATE_CONVERSION(emp.employee_id AS NUMBER) = 1;

SELECT VALIDATE_CONVERSION(emp.employee_id AS NUMBER) emp_id_test,
employee_id
FROM hr.employees emp;

SELECT DECODE(VALIDATE_CONVERSION(emp.employee_id AS NUMBER),0,
'NOT NUMBER',1,'NUMBER','N/A') emp_id_test,employee_id
FROM hr.employees emp;

SELECT case when VALIDATE_CONVERSION(emp.employee_id AS NUMBER) = 1 
then 
emp.employee_id else -1 end emp_id_test,
employee_id
FROM hr.employees emp;

Gelen bu özellik, SQL ve PL/SQL kod blokları içerisinde data validation için yazdığımız kodların karmaşıklığını azaltıp uygulama performansımızı bu noktada arttıracağı kanısındayım. Data conversion için native bir kod desteği gelmesi bu bağlamda oldukça önemli bir gelişme oldu.

 

Posted in Oracle, Uncategorized | Tagged , , , , , | Leave a comment

Oracle SQL Developer Kullanarak Teradata Veritabanına LDAP ile Bağlanmak

Herkese Selam,
oraclesqldeveloper
Bu yazıda Oracle SQL Developer kullanarak Teradata veritabanına LDAP ile nasıl bağlancağını tarif edeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Bilindiği üzere Oracle SQL Developer ile sadece bir Oracle veritabanına değil, JDBC driver’ı olan bir çok veritabanına bağlanabilmekte. Bunlardan bazıları DB2, Teradata, Access, MSSQL, MySQL. Bu yazıda ben, LDAP Authentication konfügrasyonu yapılmış bir Teradata veritabanına bağlanmayı anlatacağım.

Oracle SQL Developer ile bağlantı sağlamak istediğim Teradata veritabanının versiyonu  15. Oracle SQL Developer’ın versyonu ise 4.1.5.

Öncelikle Oracle SQL Developer’dan Teradata’ya bağlanabilmek için bir Teradata jdbc driver’ına ihtiyacım var. Bu driverı linki takip ederek indirebilirsiniz.

Driver’ı içeren .zip/.tar dosyasını indirdikten sonra bilgisayarımızda uygun bir yere çıkarmamız gerekiyor. Daha sonra Oracle SQL Developer içerisinden bu dosya içinden çıkacak tdgssconfig.jar ve terajdbc4.jar dosylarını Oracle SQL Developer’a göstermemiz gerekiyor.

Bilgisayarımıza çıkarttığımız bu dosyları Oracle SQL Developer içerisinden Tools –> Preferences –> Database –> Third Party JDBC Drivers seçenekleri ile açılan pencereden Add Entry düğmesine tıklayarak sırayla gösteriyoruz. Daha sonra Tamam butonuna tıklayarak ekranı kapatıyoruz.

jar_ext İlgili driverları gösterdikten sonra şimdi Oracle SQL Developer üzerinden yeni connection kurma ekranını açalım.

teradata

 

Evet yeni bağlantı kurma ekranını açtığımızda Oracle seçeneğinin hemen yanında Teradata bağlantı sekmesinin de geldiğini görmekteyiz. Bu .jar dosyalarımızın doğru bir şekilde gösterildiğinin kanıtı. Şimdi bağlantı kurmamız için yapmamız gereken son adım kaldı onu yapıp bağlantı kurmayı deneyeceğiz.  Son adımda bağlantımızın LDAP ile nasıl sağlayacağımızı belirlemek için bağlantımıza LOGMECH parametresini ekleyeceğiz. Default olarak connection ekranında bu seçenek gelmediği için bu parametreyi bağlantıya eklemek için Add düğmesine basacağız ve açılan pencerede LOGMECH parametresini seçip OK düğmesine bastığımızda bu parametrenin connection ekranına bir seçim düğmesi olarak eklendiğini göreceğiz. Daha sonra bu seçim düğmesi ile LDAP seçeneğini seçip işlemi tamamlayacağız. 

teradatacon

 

teradatacon2

Evet şimdi LDAP user, şifremizi ve bağlanacağımız veritabanınının adresini yazıp Teradata veritabanına bağlantı sağlayabiliriz.

connection2

Posted in Oracle, Uncategorized | Tagged , , , , | Leave a comment

Oracle SQL Developer – Scratch Editör

Herkese Selam,
oraclesqldeveloperBu yazıda sizlere Oracle SQL Developer’ın migration alt yapısı ile sunulan Scratch Editör modülünden basedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle SQL Developer’ın güçlü yanlarından biride Oracle olmayan veritabanlarından Oracle veritabanına migration için güçlü bir alt yapı sunması. Bu alt yapı içinde birden fazla özellik bulunmakta ama ben bu yazıda oldukça kullanışlı bulduğum Scratch Editör’den bahsedeceğim.

Scratch Editör alt yapısı None-Oracle (MsSQL,Teradata, Access, Sybase, DB2) sistemlerde yazılmış SQL/Procedurel SQL kodlarını Oracle SQL/PLSQL kodlarına çevirme işlemini gerçekleştiriyor. Böylelikle None-Oracle sistemlerden Oracle bir sisteme migration yapma ihtiyacınız gündeme geldiğinde veritabanı içerisinde yazmış olduğunuz uygulama kodlarını hızlı bir şekilde Oracle SQL/PLSQL notasyonuna çevirebilmeye olanak sağlıyor.

Şimdi Scratch Editöre nasıl erişildiğine bakıp bir kaç örnek yapalım.

Scratch Editöre, Tools –> Migration –> Scratch Editor yolunu izleyerek ulaşabiliyoruz. scratcheditor1

 

Scracth Editör açıldıktan sonra aşağıdaki gibi bir ekran açılıyor şimdi bu ekranın nasıl kullanıldığına bakalım.

scratcheditor2

 

Resimdeki numaralandırılmış alanları açıklayacak olur isek;

  1. Dönüşümü hangi dilden Oracle’a doğru yapacağımızı seçtiğimiz combobox.
  2. Dönüşümünü yapacağımız source kodu yazdığımız alan.
  3. Source kodu yazdıktan sonra çevirme işlemini başlatacağımız düğme.
  4. Dönüşüm sonunda sonucun oluştuğu alan.
  5. Oluşan kodun seçili Oracle DB’de çalıştırılmasını sağlayan düğme.

Şimdi bir kaç örnek ile nasıl çalıştığına bakalım;

İlk olarak MSSQL’de yazmış olduğum, içerisinde MSSQL’e has fonksiyonların kullanıldığı SQL cümlelerini Oracle’a çevirmeyi deneyeceğim.

MSSQL
---------------------------------------------------
SELECT ISNULL(EMPLOYEE_ID,1) FROM HR.EMPLOYEES; 

SELECT TOP 5 * FROM HR.EMPLOYEES;

SELECT FIRST_NAME + ' ' + LAST_NAME FROM HR.EMPLOYEES;

SELECT LEN(FIRST_NAME), GETDATE() FROM HR.EMPLOYEES;

SELECT SUBSTRING(FIRST_NAME,CHARINDEX('EM',FIRST_NAME),25) 
FROM EMPLOYEES;

Dönüşüm işlemi yapıldıktan sonra oluşan sonuçlar

Oracle
-------------------------------------------------------
SELECT NVL(EMPLOYEE_ID, 1) FROM HR.EMPLOYEES;

SELECT * FROM HR.EMPLOYEES WHERE ROWNUM <= 5;

SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES;

SELECT LENGTH(FIRST_NAME) , SYSDATE FROM HR.EMPLOYEES;

SELECT SUBSTR(FIRST_NAME, INSTR(FIRST_NAME, 'EM'), 25) 
FROM EMPLOYEES;

scratcheditor3

 

Evet gördüğümüz üzere MSSQL’e has fonksiyonların düzgün bir şekilde Oracle SQL’e çevrildiğini gözlemledik.

Şimdi birde MSSQL tarafında yazılmış bir stored procedure’ü Oracle’a çevirme işleminin nasıl dönüştüğüne bakalım.

MSSQL
-----------------------------------------------
CREATE PROC usp_KategoriUrunAdet
(@KategoriID int)
AS
BEGIN
    DECLARE @adet int;
 
    SELECT @adet=COUNT(ProductID) 
    FROM Production.Product
    WHERE ProductSubcategoryID=@KategoriID;
 
    RETURN @adet
END

//kod parcasini asagidaki sayfadan edindim.
//http://www.yazilimdilleri.net

Dönüşüm işlemi yapıldıktan sonra oluşan sonuç.

Oracle
------------------------------------------------
CREATE OR REPLACE FUNCTION usp_KategoriUrunAdet(
    v_KategoriID IN NUMBER )
  RETURN NUMBER
AS
  v_adet NUMBER(10,0);
BEGIN
  SELECT COUNT(ProductID)
  INTO v_adet
  FROM Production.Product
  WHERE ProductSubcategoryID = v_KategoriID;
  RETURN v_adet;
EXCEPTION
WHEN OTHERS THEN
  utils.handleerror(SQLCODE,SQLERRM);
END;

scratcheditor4

Evet dönüşümün başarılı bir şekilde olduğunu sonuçlardan gözlemleyebildik.

Oracle SQL Developer’ın Scratch Editörü görüldüğü üzere non-oracle bir sistemde yazılmış uygulamaları Oracle veritabanına uyarlamada bize oldukça kolaylıklar sağlıyor. Çok karmaşık uygulamaların dönüşümlerinde ne kadar başarılı olduğu test etmek için gerçek bir migration yapmak gerekir ancak %100 başarım sağlayamadığı durumu düşündüğümüz ihtimalde dahi editörün yaptığı çevirim ile uygulamanın tamamını yeniden yazmak zorunda kalmayacağımızı söyleyebiliriz.

Posted in Oracle, Uncategorized | Tagged , , , , , , , , , , , , , | Leave a comment