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