Provided by: manpages-tr_1.0.5.1-2_all bug

İSİM

       CREATE CAST - iki veri türü arasında yeni bir dönüşüm tanımlar

KULLANIM

       CREATE CAST (kaynak_tür AS hedef_tür)
           WITH FUNCTION işlev_ismi (arg_türü)
           [ AS ASSIGNMENT | AS IMPLICIT ]

       CREATE CAST (kaynak_tür AS hedef_tür)
           WITHOUT FUNCTION
           [ AS ASSIGNMENT | AS IMPLICIT ]

AÇIKLAMA

       CREATE CAST iki veri türü arasında yeni bir dönüşüm tanımlar. Örnek:

       SELECT CAST(42 AS text);

       Burada 42 tamsayı sabiti evvelce tanımlanmış bir işlev (text(int4) işlevi) çağrılarak text
       türüne dönüştürülmektedir. (Eğer böyle bir tür dönüşümü tanımlanmamışsa, dönüşüm başarısız
       olur.)

       İki  tür  ikilik olarak uyumlu olabilir, yani herhangi bir işlev çağrılmadan serbestçe bir
       türden diğer türe dönüştürülebilir.  Bu ilgili  değerlerin  aynı  dahili  gösterime  sahip
       olmalarını gerektirir. Örneğin, text ve varchar türleri ikilik olarak uyumlu türlerdir (ya
       da dahili gösterimleri aynı olan türlerdir).

       Öntanımlı olarak, bir tür dönüşümü  sadece  CAST(x  AS  tür_ismi)  veya  x::tür_ismi  gibi
       doğrudan bir tür dönüşüm isteği ile yapılabilir.

       Eğer  tür  dönüşümü  AS  ASSIGNMENT ile tanımlanmışsa, bir sütuna hedef veri türünde atama
       şeklinde örtük olarak çağrılabilir.  Örneğin, foo.f1'nin text türünde bir  sütun  olduğunu
       varsayalım,

       INSERT INTO foo (f1) VALUES (42);

       eğer  integer  türünden  text  türüne dönüşüm AS ASSIGNMENT imli olarak oluşturulmuşsa, bu
       dönüşüm mümkün olur,  yoksa  olmaz.  (Böyle  tür  dönüşümlerine  genellikle,  atamalı  tür
       dönüşümü diyoruz.)

       Eğer tür dönüşümü AS IMPLICIT ile oluşturulmuşsa, herhangi bir bağlam içinde, sadece atama
       ile değil, bir ifadenin içinde kullanıldığında bile dolaylı olarak böyle bir tür  dönüşümü
       yapılabilir. Örneğin, || işleci text türünde terimler aldığından,

       SELECT 'The time is ' || now();

       eğer  timestamp  türünden  text  türüne dönüşüm AS IMPLICIT imli olarak oluşturulmuşsa, bu
       dönüşüm mümkün olur. Aksi takdirde tür dönüşümünün doğrudan yazılması gerekir. Örnek:

       SELECT 'The time is ' || CAST(now() AS text);

       (Böyle tür dönüşümlerine genellikle, dolaylı tür dönüşümü diyoruz.)

       Tür dönüşümlerini dolaylı olarak  yapılması  için  imlerken  biraz  tutucu  olmakta  fayda
       vardır.  Dolaylı  dönüşümde  bir aşırı bolluk, çok sayıda yorumun mümkün olması nedeniyle,
       PostgreSQL'in   şaşırtıcı   komut   yorumları   seçmesine   ya   da   komutları    tamamen
       çözümleyememesine  sebep  olabilir.  En iyisi sadece aynı genel tür kategorisindeki türler
       arasında bilgi koruyan dönüşümler için  dolaylı  olarak  çağrılabilen   bir  tür  dönüşümü
       yapmaktır. Örneğin, int2'den int4'e tür dönüşümünün dolaylı olması kabul edilebilir, fakat
       float8'den int4'e  dönüşüm  şüphesiz  atama  yoluyla  yapılmalıdır.  text'den  int4'e  tür
       dönüşümü  gibi  farklı tür kategorileri arasındaki tür dönüşümünü açıkça belirterek yapmak
       en iyisidir.

       Bir tür dönüşümünün mümkün olması için kendi kaynak ve hedef  veri  türleriniz  olmalıdır.
       İkilik   olarak   uyumlu  tür  dönüşümü  oluşturabilmek  için  ise  ayrıcalıklı  kullanıcı
       olmalısınız. (Bu kısıtlamanın sebebi, hatalı  yapılan  ikilik  uyumlu  tür  dönüşümlerinin
       sunucunun kolayca çökmesine sebep olmasıdır.)

PARAMETRELER

       kaynak_tür
              Tür dönüşümünün kaynak veri türünün ismi.

       hedef_tür
              Tür dönüşümünün hedef veri türünün ismi.

       işlev_ismi(arg_türü)
              Tür  dönüşümünü  gerçekleştirecek  işlev.  İşlevin  ismi  şema nitelemeli olabilir;
              değilse, işlev  şema  arama  yolunda  aranacaktır.  İşlevin  sonuç  veri  türü  tür
              dönüşümünün hedef veri türü ile eşleşmelidir. Argümanlar aşağıda açıklanmıştır.

       WITHOUT FUNCTION
              Kaynak  ve  hedef  türlerin  ikilik  olarak  uyumlu  olduğunu belirtir, böylece tür
              dönüşümünü gerçekleştirmek için bir işleve gerek kalmaz.

       AS ASSIGNMENT
              Tür dönüşümünün atama bağlamında dolaylı olarak uygulanabileceğini belirtir.

       AS IMPLICIT
              Tür dönüşümünün herhangi bir bağlamda dolaylı olarak uygulanabileceğini belirtir.

       Tür dönüşümü gerçekleme işlevleri bir, iki ya da üç argümanlı olabilir. İlk argümanın türü
       tür dönüşümünün kaynak veri türü ile aynı olmalıdır. Varsa, ikinci argüman integer türünde
       olmalıdır; hedef türle ilgili tür dönüştürücüyü, yoksa -1  değerini  alır.  Varsa,  üçüncü
       argüman  boolean  türünde  olmalıdır; dönüşüm açıkça belirtilerek uygulanacaksa true, aksi
       takdirde  false değerini alır. (Tuhaf bir biçimde, SQL belirtimi bazı durumlarda, doğrudan
       ve  dolaylı  tür  dönüşümleri  için  farklı  davranışlar  talep eder. Bu argüman böyle tür
       dönüşümlerini gerçekleştirmesi istenen işlevler için sağlanmıştır. Kendi veri  türlerinizi
       buna konu olacak şekilde tasarlamanız tavsiye edilmez.)

       Normal olarak bir tür dönüşümü farklı kaynak ve hedef veri türlerine sahip olmalıdır. Yine
       de, dönüşümü gerçekleştirecek işlevin birden fazla argümanı olması  durumunda,  kaynak  ve
       hedef  veri  türleri  aynı  olan  tür  dönüşümü  bildirimlerine  izin  verilir. Bu, sistem
       kataloglarında türe özel uzunluk zorlama  işlevlerini  ifade  etmekte  kullanılır.  İsimli
       işlev,  tür  değerini ikinci argümanında belirtilen tür değiştirici değerine zorlamak için
       kullanılır. (Dil kuralları sadece belli yerleşik veri türlerinin tür değiştiricilere sahip
       olmasına  izin  verdiğinden,  bu  özellik  kullanıcı tanımlı hedef türlerde kullanmak için
       değildir, burada bütünlüğü sağlamak için bahsettik.)

       Bir tür dönüşümü farklı kaynak ve hedef türleri ile birden fazla argüman alan  bir  işleve
       sahip olduğunda, bir türden diğer türe dönüşümü yaparken aynı adımda bir uzunluk zorlaması
       da yapılıyor demektir. Böyle bir girdi mevcut olmadığı zaman, bir  tür  dönüşümü  kullanan
       bir tür zorlaması iki adım gerektirir; birincisinde veri türleri arasında dönüşüm yapılır,
       ikincisinde tür değiştirici uygulanır.

EK BİLGİ

       Kullanıcı tanımlı bir tür dönüşümünü kaldırmak için  DROP CAST [drop_cast(7)] kullanılır.

       Türler arasındaki dönüşümün her  iki  yönde  de  yapılmasını  istiyorsanız,  her  iki  tür
       dönüşümünü açıkça bildirmeniz gerektiğini unutmayın.

       PostgreSQL  7.3  öncesinde,  her  işlev  bir  veri türü ile aynı ismi alır, bu veri türünü
       döndürür ve farklı türde bir argüman  alıp  özdevinimli  olarak  bir  tür  dönüşüm  işlevi
       olurdu.  Bu  uzlaşım  şemaların  tanıtımıyla  ve  sistem  kataloglarında ikilik uyumlu tür
       dönüşümlerinin ifade edilebilmesi için terkedildi. Yerleşik tür dönüşüm işlevleri hala  bu
       isimleme şemasını kullanıyor olsa da, pg_cast sistem kataloğunda da tür dönüşümleri olarak
       gösterilmiş olması gerekir.

       Gerekli  olmadığında,   tür   dönüşüm   gerçekleme   işlevlerinin   hedef   veri   türünde
       isimlendirilmesi uzlaşımını kullanmaya devam etmenizi öneririz. Çoğu kullanıcı, türismi(x)
       biçiminde veri türlerini dönüştürmeye alışmıştır. Bu yazım şekli aslında bir tür  dönüşümü
       gerçekleştirme  işlevi  çağrısından  ne  eksik  ne  de  fazladır;  bir tür dönüşümü olarak
       özellikle  ele  alınmaz.  Eğer  sizin  dönüşüm  işlevleriniz  bu  uzlaşıma  uygun   olarak
       isimlendirilmemişse,  siz  şaşırtıcı kullanıcılarsınız demektir. PostgreSQL farklı argüman
       türlerine sahip işlevlere aynı ismin verilmesine izin verdiğinden  farklı  veri  türlerine
       dönüşüm  için  hepsi  hedef veri türünde isimlendirilmiş çok sayıda dönüşüm işlevine sahip
       olmanın bir zorluğu yoktur.

       Bilgi: Önceki paragrafta küçük bir zararsız yalan vardır: pg_cast'ın bir  görünüşte  işlev
              çağrısının  anlamını çözümlemekte kullanılacağı bir durum hala vardır. Eğer isim(x)
              gibi bir işlev çağrısı aslında  bir  işlevle  eşleşmiyorsa,  fakat  isim  bir  veri
              türünün  ismiyse  ve  pg_cast  x  türünden bu türe bir ikilik uyumlu tür dönüşümünü
              gösteriyorsa, çağrı bir açıkça tür dönüşümü olarak yorumlanacaktır.  İkilik  olarak
              uyumlu  tür  dönüşümleri  bir  işleve  karşılık  olmasalar bile işlevsel  sözdizimi
              kullanılarak çağrılabileceğinden böyle bir olağandışılık vardır.

ÖRNEKLER

       int4(text) işlevini kullanarak text türünden int4 türüne bir tür dönüşümü oluşturmak için:

       CREATE CAST (text AS int4) WITH FUNCTION int4(text);

       (Bu tür dönüşümü sistemde zaten önceden tanımlanmıştır.)

UYUMLULUK

       SQL:1999'un ikilik uyumlu türler veya  gerçekleme  işlevlerinin  ek  argümanlarını  hesaba
       katmaması  dışında,  CREATE  CAST  SQL:1999  ile  uyumludur. AS IMPLICIT de bir PostgreSQL
       oluşumudur.

SEE ALSO

       CREATE  FUNCTION   [create_function(7)],   CREATE   TYPE   [create_type(7)],   DROP   CAST
       [drop_cast(7)].

ÇEVİREN

       Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005