Archive for Mayıs, 2009

oracle auto-increment sorunsalı

Oracle ile tek taraflı sevişme olayım devam etmekte ve her gün "ohaaa!", "hadi canımmm!" şeklindeki nidalarım ofisin çeşitli noktalarından duyulmakta.
Bu tepkiye neden olan olaylardan birisi de geçenlerde oracle da bir tablodan data silmek için uniqe ve auto-incerement bir id'ye ihtiyaç duymamdı.
Bunu database yöneticimize söylediğimde oracle tablolarında auto-increment bir yapının bulunmadığını öğrendim. Bunun yerine sequences denen hede'nin bulunmakta. Bu arkadaş kendini tekrar etmeyen, unique ve auto-increment id'ler üretmekte. İlk olarak sqldeveloper'ın ilgili shema altında sequence kısmından bir sequences tablosu oluşturuyorsun. Başlangıç ve artış değerlerini vermeye dikkat edin. Insert ya da update işlemlerinde RESERVE_SEQ.NEXTVAL (sequences tablosunun ismi RESERVE_SEQ olsun) şeklinde havuzdan sıradaki id'yi çekiyorsun ve gerekli işlemleri yapıyorsun.

insert için örnek :

INSERT INTO TABLO (ID,KELIME) VALUES(RESERVE_SEQ.NEXTVAL,'$Kelime');

update için örnek :

UPDATE TABLO SET ID=RESERVE_SEQ.NEXTVAL WHERE ID='$Id';

red-hat tabanlı işletim sistemleri için ms-windows font yükleme

İşine yarayacak biri mutlaka çıkar..

rpm -vi ftp://ftp.pbone.net/mirror/www.haoli.org/pub/redhat-7.x/RPMS/noarch/msttcorefonts-1.2-3.noarch.rpm

Oracle PL/SQL'de limit alma eylemi

Yeni iş yerimde Oracle kullanıldığı için, yeni yazığım programda Oracle PL/SQL kullanmak zorunda kalıyorum ve tabiki mysql'e alışık olduğum için bazı farklılıklar ile karşılaşıyorum. Bunlardan biri de mysql'de bol miktarda kullandığımız limit kelimesinin pl/sql'de olmayışı. Bir örnek ile aynı sql'in 2 farklı db sistemi için nasıl uyarlanacağını anlatmak istiyorum:

PL/SQL

SELECT A.ID
FROM   (SELECT T.ID,T.BNO
FROM TABLO T
ORDER BY T.ID ASC) A
WHERE ROWNUM<10

mysql

SELECT  ID
FROM  FROM TABLO
WHERE ID >= '$BaslangicId' AND ID <= '$BitisId'
ORDER BY ID
LIMIT 0,10

Fark yeterince açık olsa gerek :)