23 Ekim 2010 Cumartesi

ORACLE TRIGGER YAPILARI

--tablolar uzerinde belirli bir olay olduktan sonra otomatik olarak calısan sistemlere denir.
-- after ,before olmak uzere 2 tiptedir.

--after :işlemler yapıldıktan sonra calısır
--before : normal kosullarda calıstırılmasaı gereken kodların yerine bunu calıstırır.

-- sql serverdaki inserted ve deleted tablolarının yerine :NEW ve :OLD tabloları bulunmaktadır.


--Ornek : urunler tablosuna bir eleman eklendikten sonra o urunadı alınır ve yedek tablosuna aktarılır..
CREATE OR REPLACE TRIGGER DENEME
AFTER INSERT
ON URUNLER
FOR EACH ROW

DECLARE
V_USERNAME VARCHAR2(20);

BEGIN
SELECT USER INTO V_USERNAME FROM DUAL;

INSERT INTO URUNLER_YEDEK(URUNADI,KAYITYAPAN)
VALUES
(
:NEW.URUNADI,V_USERNAME
);

END;


--TEST------
INSERT INTO URUNLER(URUNADI) VALUES('CIZI');

SELECT * FROM URUNLER_YEDEK;

ORACLE SWITCH CASE YAPILARI

--sadece esitlik durumuna bakan bu sistem if yapısına gore daha hızlı calısmaktadır...

DECLARE
OGRCOUNT NUMBER;
BEGIN

SELECT COUNT(*) INTO OGRCOUNT FROM STUDENTS;

CASE OGRCOUNT
WHEN 1 THEN
DBMS_OUTPUT.PUT_LINE('BIR OGRENCI OLSUN YETER BANA');

WHEN 0 THEN
DBMS_OUTPUT.PUT_LINE('OGRENCI YOK');

ELSE
DBMS_OUTPUT.PUT_LINE('BU KADARI DA FAZLA AMA');

END CASE;
END;

ORACLE KOSUL IFADELERI

--IF ELSIF ELSE YAPILARI

--sorgularınızdan gelen nesnelerin durumlarına bakarak işlemler yapmak için kullanılır.

DECLARE
OGRCOUNT NUMBER;
BEGIN

SELECT COUNT(*) INTO OGRCOUNT FROM STUDENTS;

IF OGRCOUNT >1
THEN
DBMS_OUTPUT.PUT_LINE('SINIFIN DURUMU IYI');

ELSIF OGRCOUNT <1
THEN
DBMS_OUTPUT.PUT_LINE('HIC OGRENCI YOK NORMAL DEGIL');

ELSE
DBMS_OUTPUT.PUT_LINE('BIR OGRENCI OLSUN YETER BANA');

END IF;
END;

ORACLE FUNCTION YAPILARI

--yapılan işlemlerden sonra geriye deger donduren sistemlere denir...
--return anahtar kelimesi nesneyi dondurur.

CREATE OR REPLACE FUNCTION KDVLIGETIR(DEGER NUMBER, KDVORAN NUMBER)
RETURN NUMBER
AS
BEGIN
RETURN DEGER * KDVORAN;
END;

-- CALISTIRILMASI
SELECT KDVLIGETIR(100,1.18) FROM DUAL;

--DUAL :  FUNCTION GIBI YAPILARIN CALISTIRILABILMESI ICIN GEREKLI OLAN SANAL TABLODUR.

--sadece functionlar matematiksel işlemler için kullanılmaz. select sorguları gibi soruglar
--içinde kullanılabilir.

CREATE OR REPLACE FUNCTION IDYEGORE(OGRID NUMBER)
RETURN VARCHAR2
AS
V_NAME VARCHAR2(40);
BEGIN

SELECT STUDENTNAME INTO V_NAME FROM STUDENTS WHERE STUDENTID=OGRID;
RETURN V_NAME;

END;

----------CALISTIRILMASI

DECLARE
  OGRID NUMBER;
  v_Return VARCHAR2(200);
BEGIN
  OGRID := 2;

  v_Return := IDYEGORE(
    OGRID => OGRID
  );
  DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
END;

-- DBMS denilen yapı sorgu sonuclarının goruntulenebilmesi için yaratılmıs bir cıktı merkezidir.
--bu yapı varsayılan olarak kapalıdır. acabilmek için ust menu => Vıew=> Dbms output
-- yesil + işaretine basarak kendinize bir oturum acın...

ORACLE STORE PROCEDURE




--database içerisinde compile edilmiş yani derlenmiş hazır bir halde bekleyen kodlara procedure denilir.
--normal kodlara gore daha hızlı calıslır. kodlar database içerisinde saklandıgı işçin daha guvenlidir.



CREATE OR REPLACE PROCEDURE CEKLE
(
CNAME IN VARCHAR2
)
AS
BEGIN
INSERT INTO CLASSES(CLASSNAME) VALUES(CNAME);
END;

--CALISTIRILMASI

DECLARE
CN VARCHAR2(30);

BEGIN
CN:= 'YV35203';
CEKLE(CNAME=>CN);

END;

--TEST
SELECT * FROM CLASSES;



-- Procedure olarak adlandırdıgımız bu yapılar sql serverda oldugu gibi direkt select sorgularını calıstıramaz.
-- eger select sorgunuzu yazmak isterseniz geriye dondureceginiz tiplerin out parametreli olması gerekir.

CREATE OR REPLACE PROCEDURE IDYEGORESINIF
(
CID IN NUMBER,
CNAME OUT VARCHAR2
)
AS
BEGIN
SELECT CLASSNAME INTO CNAME FROM CLASSES WHERE CLASSID = CID;
END;

ORACLE VIEWLER



-- karmasık select sorgularının defalarca yazılması yerine bunları takma bir ad ile kaydetmek ve
--kısaca cagırmak suretiyle calısır.

--CREATE OR REPLACE : yoksa yarat varsa eskisini sil yenisini yarat...
--Force : eger sistem içerisinde view olusturmak istediğiniz tablo yok ise view için izin verir.

--nonforce : olmayan bir tablo için view yaratılmaz. varsayılan guvenlik ayarıdır.

--with check option : eger sorgunuzda where kriteri var ise ve siz view uzerinden insert yapmak istiyor iseniz
--where kriterine uygun bilgi girmek zorundasınız...

--alias : sorguda yer alan kolonlarınıza yeni ad vermek için kullanılır.. as gibi ....

CREATE OR REPLACE VIEW SINIFLARIGETIR
AS
SELECT * FROM CLASSES;


--CALISTIRILMASI
SELECT * FROM SINIFLARIGETIR;


----**********
CREATE OR REPLACE VIEW IDYEGOREOGRENCI
AS
SELECT STUDENTNAME,STUDENTCLASS FROM STUDENTS WHERE STUDENTCLASS = 1
WITH CHECK OPTION CONSTRAINT SINIFBASKISI;

--***TEST
INSERT INTO IDYEGOREOGRENCI
VALUES('YUCEL','1');

ORACLE VERI TIPLERI

--CHAR : 2000 karaktere kadar olan verileri tutar. sabit uzunluklu bilgileri saklamak için kullanılır.
--NCHAR : char gibidir ancak diger dillerdeki karsılıkları da saklar. Unicode..

--VARCHAR2 : 4000 karaktere kadar bilgi saklar.
--NVARCHAR2 : varchar2 gibidir ancak Unicode degerleri de saklar.

-- NUMBER : int ,tinyint ,money,decimal farketmez hepsini numberda yakalayabilirsiniz.
--kullanımı sqldeki decimal gibidir. Number(x,y) => Number(5,2)
--toplam karakter sayısı 5 : ondalık kısmı 2 olacak demektir.  123,99

--Date : MÖ 1 ocak 4712 ile MS 31 aralık 9999 arasındaki tarihleri temsil eder.

--CLOB : character large object : 4 gba kadar lık metinsel bir ifadeyi saklayabilir.
--varchar(max)a denk gelir.

--BLOB : Binary large onject : 4gblık bir filei dbde saklayabilir. resim,video,mp3,pdf,exe,xls,doc
--varbinarye karsılık gelen tiptir.