Arşiv

Archive for the ‘Oracle’ 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’)

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:, ,

Oracle Sistem Tabloları

Haziran 21, 2011 Yorum bırakın

Aşağıda en çok kullanılan Oracle sistem tabloları alfabetik sıra ile bulunmaktadır.

Sistem Tablosu Açıklama
ALL_ARGUMENTS Nesne içerisinde kullanıcı tarafından erişilebilecek argümanlar
ALL_CATALOG Kullanıcının erişebileceği bütün tablolar, view’lar, synonym’ler ve sequence’ler
ALL_COL_COMMENTS Erişilebilen tablolara ve view’lara ait yorumlar
ALL_CONSTRAINTS Erişilebilen tablolardaki kısıtlama tanımları
ALL_CONS_COLUMNS Kısıtlama tanımlamalarındaki erişilebilen kolonlar ile ilgili bilgi
ALL_DB_LINKS Kullanıcının erişebildiği veritabanı link’leri
ALL_ERRORS Kullanıcının depolanan nesneler üzerinde oluşturmaya yetkili olduğu halihazırdaki hatalar
ALL_INDEXES Kullanıcı tarafından erişilebilen tabloların üzerindeki index tanımları
ALL_IND_COLUMNS Index’lerde bulunan kullanıcının erişebileceği tablolardaki kolonlar
ALL_LOBS Kullanıcının erişebildiği tablolardaki LOB tanımları
ALL_OBJECTS Kullanıcının erişebildiği nesneler
ALL_OBJECT_TABLES Kullanıcının erişebildiği bütün nesne tabloları tanımları
ALL_SEQUENCES Kullanıcının erişeibldiği sequence tanımları
ALL_SNAPSHOTS Kullanıcının erişebildiği snapshot’lar
ALL_SOURCE Kullanıcının oluşturmasına izin verilen mevcut nesnelerin kodları
ALL_SYNONYMS Kullanıcının erişebildiği synonymler
ALL_TABLES Kullanıcının erişebildiği ilişkisel tablo tanımları
ALL_TAB_COLUMNS Kullanıcının tablo , view ve cluster’larına ait kolonlar
ALL_TAB_COL_STATISTICS Kullanıcının tablo , view ve cluster’larına ait kolonlar
ALL_TAB_COMMENTS Kullanıcının erişebildiği tablo ve view’lerin üzerindeki yorumlar
ALL_TRIGGERS Kullanıcının erişebildiği bütün trigger’lar
ALL_TRIGGER_COLS Kullanıcının tablolarındaki trigger’lar veya trigger kolonları
ALL_TYPES Kullanıcının erişebildiği bütün tipler
ALL_UPDATABLE_COLUMNS Bütün güncellenebilir kolon tanımları
ALL_USERS Veritabanının bütün kullanıcılarının bilgisi
ALL_VIEWS Kullanıcının erişebildiği view tanımları
DATABASE_COMPATIBLE_LEVEL init.ora dan set edilen Database compatible parametresi
DBA_DB_LINKS Veritabanındaki bütün veritabanı link’leri
DBA_ERRORS Veritabanındaki nesnelere ait mevcut hatalar
DBA_OBJECTS Veritabanındaki bütün nesneler
DBA_ROLES Veritabanındaki bütün roller
DBA_ROLE_PRIVS Rollere ve kullanıcılara verilen roller
DBA_SOURCE Veritabanındaki bütün mevcut nesnelerin kodları
DBA_TABLESPACES Bütün tablespace tanımları
DBA_TAB_PRIVS Veritabanındaki bütün yetkilendirmeler
DBA_TRIGGERS Veritabanındaki bütün trigger’lar
DBA_TS_QUOTAS Bütün kullanıcılar için tablespace kotaları
DBA_USERS Veritabanındaki bütün kullanıcılar
DBA_VIEWS Veritabanındaki bütün view’lar
DICTIONARY Veritabanındaki bütün data dictionary tabloları ve view’lar
DICT_COLUMNS Data dictionary tabloları ve view’lardaki kolonlar
GLOBAL_NAME global veritabanı adı
NLS_DATABASE_PARAMETERS Veritabanındaki kalıcı NLS parametreleri
NLS_INSTANCE_PARAMETERS Örneğe(instance) ait NLS parametreleri
NLS_SESSION_PARAMETERS Kullanıcı oturumuna ait NLS parametreleri
PRODUCT_COMPONENT_VERSION Bileşenler için versiyon ve durum bilgisi
ROLE_TAB_PRIVS Tablo hakları ve rol yetkileri
SESSION_PRIVS Kullanıcının halihazırdaki yetkileri
SESSION_ROLES Kullanıcnın halihazırdaki rolleri
SYSTEM_PRIVILEGE_MAP Erişim hakları tip kodları
TABLE_PRIVILEGES Kullanıcının yetki verdiği ,yetki aldığı ,sahip olduğu , erişebilecek bir role sahip olduğu ve herkese açık olan nesneler üzerindeki yetkiler
TABLE_PRIVILEGE_MAP Tablo erişim tipi kodları

Kaynak