Arşiv

Archive for the ‘Veritabanı’ Category

Splere Opsiyonel Input

Kasım 21, 2013 Yorum bırakın

Uğur Sak isimli arkadaşım tarafından yazılmış açıklamayı tarihe not düşüyorum. Dikkat faydalıdır.

İhtiyaçtan dolayı finansal splerimize opsiyonel input eklememiz gerekti. Benim gibi daha önce bilmeyenler varsa bilgi vermeye çalışalım. Parametrik olarak yarattığınız input gelmediği zaman otomatik null değeri ile doldurulur.

Örnek bir sp ile açıklamaya çalışalım. pi_test3 ve pi_test4 ün opsiyonel olduğu bir sp yaratalım.

CREATE OR REPLACE PROCEDURE Deneme (pi_test1 IN       VARCHAR2,
pi_test2  IN       VARCHAR2,
pi_test3  IN       VARCHAR2 DEFAULT NULL, —-parametrik input
pi_test4  IN       VARCHAR2 DEFAULT NULL) —-parametrik input

Referans Vermeden Çağırma;

Var olan splerimiz de böyle bir input eklerseniz sona eklemeniz gerekmektedir. Sebebi spleri kullandığımız yerde referanssız olarak çağırıyoruz. Ya bu kullanımları düzeltmemiz gerekiyor yada tek input eklemenizi tavsiye ediyoruz.
Çünkü referanssız olarak çağırdığımızda spler input sırasına göre atama yapıyor.

Deneme ( ‘1’,’2’);            olarak çağırabiliriz.
Deneme ( ‘1’,’2’,’3’);       olarak çağırabiliriz.
Deneme ( ‘1’,’2’,’3’,’4’);  olarak çağırabiliriz.
Deneme ( ‘1’,’2’,’4’);       olarak çağıramayız. Çağırırsak  pi_test3 e = 4 değeri atanmış olur.

Referans Vererek Çağırma;

Deneme (pi_test1 => ‘1’,
pi_test2 => ‘2’,
pi_test3 => ‘3’,
pi_test4 => ‘4’)

Deneme (pi_test1 => ‘1’,
pi_test2 => ‘2’

Deneme (pi_test1 => ‘1’,
pi_test2 => ‘2’,
pi_test3 => ‘3’)

Deneme (pi_test1 => ‘1’,
pi_test2 => ‘2’,
pi_test4 => ‘4’)

Sql Server Numeric Hk. İvedi Açıklama

Mayıs 23, 2013 Yorum bırakın

Oracle’da bir numeric tanımlama yaptığızda şu şekildedir :

number(4,3)  –> 9999,999 ‘a kadar.

Fakat Sql Server’da bu biraz değişikmiş :

numeric(4,3) –> 9,999 ‘a kadar.

Acı tecrübe ile sabittir.

Birden fazla kolonu IN ile kullanmak

Mart 26, 2013 Yorum bırakın

Bu kadar :

SELECT *
FROM hayvanlar h
WHERE

(h.adi, h.ailesi, h.ayak_sayisi)

IN

(SELECT o.adi,o.ailesi,o.ayak_sayisi
FROM hayvan_ozellikleri o
WHERE o.adi = ‘MAYMUN’)

Fakat statik değerler ile kullanmaya izin vermiyor. yani ” IN ((‘TOPAÇ’,’KÖPEK’,’4′),(‘BONCUK’,’AT’,’4′)) ” şeklinde kullanılmıyor.

Kategoriler:Oracle, Veritabanı Etiketler:, ,

Oracle’da bir sub procedure dışarıdan kullanılabilir mi ?

Aralık 14, 2012 Yorum bırakın

Hayır.

OrnekProcedure.AltProcedure(p1,p2);

şeklinde bir kullanım olmuyor.

Oracle – Ref Cursor , Oracle’da sonuç olarak tablo dönmek

Aralık 14, 2012 Yorum bırakın

Aşağıdaki prosedür out parametresi olarak bir cursor dönecek. Dönen bu cursor diğer bir prosedür içerisinde kullanılabilir.

CREATE OR REPLACE
PROCEDURE get_emp_rs (p_deptno    IN  emp.deptno%TYPE,
                      p_recordset OUT SYS_REFCURSOR) AS  -- Burada out olarak tanımlandı
BEGIN 
  OPEN p_recordset FOR -- Burada açıldı
    SELECT ename,
           empno,
           deptno
    FROM   emp
    WHERE  deptno = p_deptno
    ORDER BY ename;
END GetEmpRS;
/

SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  l_cursor  SYS_REFCURSOR;
  l_ename   emp.ename%TYPE;
  l_empno   emp.empno%TYPE;
  l_deptno  emp.deptno%TYPE;
BEGIN
  get_emp_rs (p_deptno    => 30,
              p_recordset => l_cursor);

  LOOP  -- bu döngü içerisinde okunmaya başlandı Allah kabul etsin.
    FETCH l_cursor
    INTO  l_ename, l_empno, l_deptno;
    EXIT WHEN l_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(l_ename || ' | ' || l_empno || ' | ' || l_deptno);
  END LOOP;
  CLOSE l_cursor;
END;
/

Bu cursor :

  • PL/sql içerisinde
  • ADO Recordset olarak
  • Java Resultset olarak

kullanılabiliyor.

Kaynak : http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php

Kategoriler:Oracle, Veritabanı Etiketler:, ,

PL/SQL Select Into Hilesi

Aralık 13, 2012 Yorum bırakın

SELECT INTO kullanırken değer bulunamadığında hata fırlatması engellenmek istiyorum ve begin-exception-end bloğuna almak istemiyorum. O halde :

SELECT MAX(ORNEK_DEGER) INTO P_VALUE FROM ORNEK_TABLO;

Böyle yaptığımda veri dönmese dahi hata fırlatılmayacak.

 

Kategoriler:Oracle, Veritabanı

Oracle Dinamik Sorgu

Temmuz 30, 2012 Yorum bırakın

Bir dinamik sorguyu adamakıllı çalıştırma yöntemini araştırırken kaynak kısmında verdiğim makaleyi okudum. Okumak isteyen için güzel bir makale. Özetle :

select num
from (select distinct q.NUM
       from cqqv q 
       where  (q.bcode = :bcode) 
                  and  (1=1 or :lb is null) 
                  and  (1=1 or :type is null) 
                  and  (q.edate> :edate) 
                order by dbms_random.value()) subq 
where rownum <= :numrows

Sonucunu üreten bir dinamik sorgu olşuturuluyor. Parametre değerleri sorgu oluşturulurken yazılmıyor. Sorgu içerisinde bind edilebilecek şekilde düzenleniyor.  Diğer tavsiye edilen yöntemler için aşağıdaki başlığa bakılmasını şiddetle tavsiye ederim. Bir dost.

http://stackoverflow.com/questions/1716590/pl-sql-optional-conditions-in-where-clause-without-dynamic-sql

Kategoriler:Oracle, Veritabanı

Oracle’da hata mesajı ne kadar uzağa fırlatılabilir

Temmuz 27, 2011 1 yorum

Çok uzağa değil.

SUBSTR(SQLERRM, 1, 100);

şeklinde çabucak yakalanır. (SUBSTR ile ilk 100 karakteri alınır)

Kategoriler:Oracle, Veritabanı Etiketler:, ,

Oracle’da Açık Oturumlar (Session)

Temmuz 1, 2011 Yorum bırakın

Oracle’da bir kullanıcıya ait açık olan oturumları  (session’ları) nasıl mı görürüz ?

SELECT a.spid,
b.sid,
b.serial# as ser#,
b.machine as box,
b.username as username,
b.osuser as os_user,
b.program as program
FROM v$session b,v$process a
WHERE b.paddr = a.addr
AND TYPE = ‘USER’
AND b.username = ‘KULLANICI_ADI’
ORDER BY spid;

Şeklinde görebiliriz.

Kaynak

Oracle Hint

Haziran 21, 2011 Yorum bırakın

SELECT /*+ index(t1 t1_abc) index(t2 t2_abc) */ COUNT(*)
FROM t1, t2
WHERE t1.col1 = t2.col1;

t1 : tablo 1
t1_abc : tablo 1 üzerindeki index

t2 aynen..

Bu sorguda oracle cebren ve hile ile t1_abc indeksini kullanmaya ikna edilmiştir.

Kategoriler:Oracle, Veritabanı Etiketler:, ,