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

İSİM

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

KULLANIM

       CREATE CAST (kaynak_tr AS hedef_tr)
           WITH FUNCTION ilev_ismi (arg_tr)
           [ AS ASSIGNMENT | AS IMPLICIT ]

       CREATE CAST (kaynak_tr AS hedef_tr)
           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 tr_ismi) veya
       x::tr_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 tr dnm 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 tr dnm 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_tr
              Tür dönüşümünün kaynak veri türünün ismi.

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

       ilev_ismi(arg_tr)
              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ı,  trismi(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