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

PostgreSQL                                                                                        CREATE CAST(7)