Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Column Default Değeri Verme
#1
Bir kolon(column) için varsayılan(default) değeri vermek istediğimizde sabit bir bilgi yazarak değer verebiliyoruz.
Fakat farklı bir tablodan bir SELECT komutu ile veya bir hesaplama sonucunu varsayılan değer olarak vermek istediğimizde  buna izin vermez.

Bu işlemi yapabilmek için varsayılan değeri döndüren bir fonksiyon yazmamız gerekiyor. Bu fonksiyonu yazdıktan sonra varsayılan değeri atayabiliriz.
Ben örnek olması açısından bir fonksiyon yazdım. Bu fonksiyon stok_tipi isimli tablodaki verilerden tip kolonuna ait değer getiriyor.


CREATE TABLE public.stok_tipi
(
  id serial,
  validity boolean NOT NULL DEFAULT true,
  tip character varying(16) NOT NULL,
  is_default boolean NOT NULL DEFAULT false,
  CONSTRAINT stok_tipi_pkey PRIMARY KEY (id),
  CONSTRAINT stok_tipi_tip_is_default_key UNIQUE (tip, is_default),
  CONSTRAINT stok_tipi_tip_key UNIQUE (tip)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.stok_tipi
  OWNER TO postgres;


CREATE OR REPLACE FUNCTION public.get_default_stok_tipi()
 RETURNS character varying AS
'SELECT tip FROM stok_tipi WHERE is_default=true Limit 1'
 LANGUAGE sql VOLATILE
 COST 100;
ALTER FUNCTION public.get_default_stok_tipi()
 OWNER TO postgres;

Bu fonksiyonu da başka bir tabloda bir kolon için varsayılan değeri bu fonksiyondan almasını isteyerek dinamik bir varsayılan değer vermiş olacağız. Burada dikkat edilmesi gerek husus fonksiyonun adını aynen yazmak ve sonuna parantez aç kapa koymak.
CREATE TABLE public.stok_karti
(
 id serial,
 validity boolean NOT NULL DEFAULT true,
 stok_tipi character varying(16) NOT NULL DEFAULT get_default_stok_tipi(),
 CONSTRAINT stok_karti_pkey PRIMARY KEY (id),
 CONSTRAINT stok_karti_stok_tipi_fkey FOREIGN KEY (stok_tipi)
     REFERENCES public.stok_tipi (tip) MATCH SIMPLE
     ON UPDATE CASCADE ON DELETE SET NULL)
WITH (
 OIDS=FALSE
);
ALTER TABLE public.stok_karti
 OWNER TO postgres;


Mesela bir satır kaydın ilk eklendiği tarihi otomatik olarak girmek istersek, tarih saat bilgisi içeren bilgi column tanımlarız ve varsayılan değer olarak now() (PostgreSQL içinde tanımlı tarih ve saat bilgisini getiren fonsiyon) fonksiyonunu verirsek kayıt girildiği anda biz bir bilgi girmezsek varsayılan değeri otomatik olarak gelir.
ALTER TABLE test_tablosu
ADD COLUMN olusturma_tarihi timestamp without time zone NOT NULL DEFAULT now();
PostgreSQL - Linux - Delphi
Cevapla
#2
Paylaşım için teşekkürler
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi