
Olurda bir gün ORA-00000: normal, successful completion hatasını alırsanız bunun bir çok sebebi olabilmesine karşın sizi en çok uğraştıracak olanı aslında hata alınmadığı bir anda sizin hata kontrolü yapmanızdan kaynaklananı olacaktır. Herhangi bir hata alınmadan SQLCODE ya da SQLERRM’ı çağırırsanız ORA-00000: normal, successful completion hatasını alırsınız.
DECLARE
ERR_NO NUMBER;
ERR VARCHAR2(5000);
BEGIN
ERR_NO:=SQLCODE;
ERR:=SQLERRM;
DBMS_OUTPUT.PUT_LINE('HATA NO: '||ERR_NO);
DBMS_OUTPUT.PUT_LINE('HATA : '||ERR);
END;
Force view , view farkı
İki view arasındaki tek fark eğer force view yaparsanız yazdığınız kod hatalı bile olsa create eder fakat invalid olarak create eder hatalıysa.
Normal view’da böyle bir durum söz konusu değil hatalıysa create işlemi yapılmaz.
Force View
CREATE OR REPLACE FORCE VIEW AKUZHAN.VIEW_DENEME (ID,NAME) AS SELECT ID , NAME FROM EMPLOYEES ;
Normal View
CREATE OR REPLACE FORCE VIEW AKUZHAN.VIEW_DENEME AS SELECT ID , NAME FROM EMPLOYEES ;
En büyük date alanı olan sysdate+2′yi döndürür.
SELECT GREATEST(SYSDATE,SYSDATE+1,SYSDATE+2) FROM DUAL ;
Yıl bilgisini döner.
SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR FROM DUAL; Ay bilgisini döner. SELECT EXTRACT(MONTH FROM SYSDATE) AS M FROM DUAL; Gün bilgisini döner. SELECT EXTRACT(DAY FROM SYSDATE) AS D FROM DUAL;
SELECT SYSDATE – INTERVAL ’10′ SECOND FROM DUAL;
SELECT SYSDATE – INTERVAL ’10′ MINUTE FROM DUAL;
SELECT SYSDATE – INTERVAL ’10′ HOUR FROM DUAL;
SELECT SYSDATE – INTERVAL ’10′ DAY FROM DUAL;
SELECT SYSDATE – INTERVAL ’10′ YEAR FROM DUAL;
10 saniye çıkarır. SELECT SYSDATE - INTERVAL '10' SECOND FROM DUAL; 10 dakika ekler. SELECT SYSDATE + INTERVAL '10' MINUTE FROM DUAL; 10 saat çıkarır SELECT SYSDATE - INTERVAL '10' HOUR FROM DUAL; 10 gün çıkarır SELECT SYSDATE - INTERVAL '10' DAY FROM DUAL; 10 yıl ekler SELECT SYSDATE - INTERVAL '10' YEAR FROM DUAL;
saat gün v.b. verip tarihe ekleme yada çıkarma yapmak için to_dsinterval fonksiyonunu kullanabiliyoruz.
1 saat 15 dakikda 25 saniye ekler.
select sysdate +to_dsinterval(’0 01:15:25′) dt from dual;
1 gün 2 saat 15 dakika 25 saniye ekler
select sysdate +to_dsinterval(’1 02:15:25′) dt from dual;
1 gün 2 saat 15 dakika 23 saniye çıkarır. Başındaki – ifadeyi komple kapsar.
select sysdate +to_dsinterval(‘-1 02:15:23′) dt from dual;
1 gün çıkarır ( sysdate-1 ).
select sysdate +to_dsinterval(‘-1 00:00:00′) dt from dual;saat gün v.b. verip tarihe ekleme yada çıkarma yapmak için to_dsinterval fonksiyonunu kullanabiliyoruz.
1 saat 15 dakikda 25 saniye ekler.
select sysdate +to_dsinterval('0 01:15:25') dt from dual;
1 gün 2 saat 15 dakika 25 saniye ekler
select sysdate +to_dsinterval('1 02:15:25') dt from dual;
1 gün 2 saat 15 dakika 23 saniye çıkarır. Başındaki – ifadeyi komple kapsar.
select sysdate +to_dsinterval('-1 02:15:23') dt from dual;
1 gün çıkarır ( sysdate-1 ).
select sysdate +to_dsinterval('-1 00:00:00') dt from dual;
Oracle WITH yapısı
Oracle’da with yapısı ile aynı select’i birden fazla farklı kriterler için kullanmanız gerekiyorsa tekrar tekrar kod yazmamak için kullanılabilir. Aşağıdaki örnek her ne kadar açık olmasada ABDULLAH ve KUZHAN kriterleri için NAME alanlarını dual’den dönen select tekrar tekrar çekilmedi. Birkez çekilip X ismiyle birden fazla kez kullanıldı.
WITH X AS
(
SELECT ‘ABDULLAH’ NAME FROM DUAL
UNION
SELECT ‘KUZHAN’ NAME FROM DUAL
UNION
SELECT ‘DENEME’ NAME FROM DUAL
UNION
SELECT ‘BUDA DİĞER DENEME’ NAME FROM DUAL
)
SELECT
X.*
FROM
X
WHERE
X.NAME=’ABDULLAH’
UNION ALL
SELECT
X.*
FROM
X
WHERE
X.NAME=’KUZHAN’;
Oracle’da with yapısı ile aynı select’i birden fazla farklı kriterler için kullanmanız gerekiyorsa tekrar tekrar kod yazmamak için kullanılabilir. Aşağıdaki örnek her ne kadar açık olmasada ABDULLAH ve KUZHAN kriterleri için NAME alanlarını dual’den dönen select tekrar tekrar çekilmedi. Birkez çekilip X ismiyle birden fazla kez kullanıldı.
WITH X AS
(
SELECT 'ABDULLAH' NAME FROM DUAL
UNION
SELECT 'KUZHAN' NAME FROM DUAL
UNION
SELECT 'DENEME' NAME FROM DUAL
UNION
SELECT 'BUDA DİĞER DENEME' NAME FROM DUAL
)
SELECT
X.*
FROM
X
WHERE
X.NAME='ABDULLAH'
UNION ALL
SELECT
X.*
FROM
X
WHERE
X.NAME='KUZHAN';
Raise application error verirken hata kodu, hatanın kendisi, ve son parametre olarak isterseniz hatanın stack trace’ini alabilirsiniz. True göndermek yeterli.
Böyle bir yapının olmadığını üzülerek söylüyorum
Sadece rollback için düşünülmüş bir yapı.
follow: