Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Oracle ve PostgreSQL veritabanlarında auto increment özelliği yerine kullanılan bir veritabanı nesnesi.

Örneğin aşağıdaki gibi bir tablomuz var;

create table kisi (
    id int not null,
    ad varchar(20)
)

Bu tablonun id alanına otomatik artan değerler girilmesini istiyoruz. Bazı veritabanlarında id alanını tanımlarken sonuna auto_increment yazarsınız olur, biter. Bazılarında ise bir sequence create edip, kullanmak gerekir. Şöyle ki;

create sequence kisi_id_seq;

Artık insert cümlelerimizde bu seküensi kullanabiliriz. Bunun için nextval(seq_ismi) fonksiyonunu kullanıyoruz.

insert into kisi
(id, ad)
values
(nextval('kisi_id_seq'), "Mustapha")

fizikci
27 Ağustos 2005 23:49
2.  Veritabanları arasında uyumluluk artık moda yaklaşımlardan biri. Yani diyorsunuz ki "benim programım Oracle'la da çalışsın, SQL Server'la da, PostgreSQL'le de." Bence çok gereksiz, programcının elini kolunu bağlayan bir attraksiyon bu. Ne gerek var kardeşim, yaz PostgreSQL için kodları, boşver diğer veritabanlarını. Hem beleş, hem de canavar gibi veritabanı işte! Ne var ki bütün yazılımcılar benim gibi düşünmüyor. Bu yazılımcıların takıldığı noktalardan biri auto increment ve sequence meselesidir. Çünkü SQL Server auto increment kullanırken, Oracle ve Postgres sequence kullanır. Bu problemi aşmak  için SQL Server'da sequence yaklaşımı kodlanabilir. Şöyle ki;

1. Önce sequencelerin saklandığı bir tablo yaparsınız:
create table sequences(
   seq_name varchar(50),
   last_value int
)

Bu tabloda örneğin aşağıdaki kayıtlar vardır:
seq_name      last_value
-------------------------
kisi_id_seq     23
firma_id_seq    12

2. nextval fonksiyonunu yazarsınız:
  CREATE FUNCTION nextval( @seq_name varchar(50) )
  returns int
  AS
  begin
        declare @seq_val int
        set @seq_val = -1
      
        UPDATE sequences
        SET   @seq_val= last_value = last_value + 1
        WHERE  seq_name= @seq_name
 
        RETURN  @seq_val
  end
GO

3. Son olarak bu fonksiyonu insertler için kullanırsınız. Ayno Oracle veya Postgres'deki gibi.
insert into kisi
(id, ad)
values
(nextval('kisi_id_seq'), "Mustapha")

fizikci
28 Ağustos 2005 00:04
3.  2.Öneriyi MSSQL'de denerseniz çalışmayacağını görürsünüz.
Çünki bir fonksiyon içerisinde UPDATE işlemi gerçekleştiremiyor.
Yani buda yeni bir ID alma olayını bir fonksiyona yaptırmanın zor olacağını gösteriri. Hem yeni bir ID ver, hemde değeri bir artır, dedirtemiyoruz MSSQL 2005'e.
Bu olay stored procedure ile çözülebilirmi dersek, ID alanınız bir "int" değeri ise olabiliyor, Çünki, normalde SP'ler Output parameter ile geriye değer döndürürler. Biz ise
insert into kisi
(id, ad)
values
(nextval('kisi_id_seq'), "Mustapha")

Böyle bir kodun çalışmasını istiyoruz. Ve SP'lerde Return ifadesi yanlızca int türünden bir değer geri döndürüyor. Sebebini merak etmekle birlikte, araştırmadım...
haydar
11 Mart 2007 12:59
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1125 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen