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

ISIM

       CREATE CAST - iki veri turu arasinda yeni bir donusum tanimlar

KULLANIM

       CREATE CAST (kaynak_t"ur AS hedef_t"ur)
           WITH FUNCTION i,slev_ismi (arg_t"ur"u)
           [ AS ASSIGNMENT | AS IMPLICIT ]

       CREATE CAST (kaynak_t"ur AS hedef_t"ur)
           WITHOUT FUNCTION
           [ AS ASSIGNMENT | AS IMPLICIT ]

A,CIKLAMA

       CREATE CAST iki veri turu arasinda yeni bir donusum tanimlar. Ornek:

       SELECT CAST(42 AS text);

       Burada  42  tamsayi  sabiti  evvelce  tanimlanmis bir islev (text(int4)
       islevi) cagrilarak text turune donusturulmektedir. (Eger boyle bir  tur
       donusumu tanimlanmamissa, donusum basarisiz olur.)

       Iki  tur  ikilik  olarak  uyumlu  olabilir,  yani  herhangi  bir  islev
       cagrilmadan serbestce  bir  turden  diger  ture  donusturulebilir.   Bu
       ilgili  degerlerin  ayni  dahili gosterime sahip olmalarini gerektirir.
       Ornegin, text ve varchar turleri ikilik olarak uyumlu turlerdir (ya  da
       dahili gosterimleri ayni olan turlerdir).

       Ontanimli  olarak,  bir  tur  donusumu  sadece CAST(x AS t"ur_ismi) veya
       x::t"ur_ismi gibi dogrudan bir tur donusum istegi ile yapilabilir.

       Eger tur donusumu AS ASSIGNMENT ile  tanimlanmissa,  bir  sutuna  hedef
       veri  turunde  atama  seklinde  ortuk  olarak  cagrilabilir.   Ornegin,
       foo.f1'nin text turunde bir sutun oldugunu varsayalim,

       INSERT INTO foo (f1) VALUES (42);

       eger integer turunden text turune donusum  AS  ASSIGNMENT  imli  olarak
       olusturulmussa,  bu  donusum  mumkun  olur,  yoksa  olmaz.  (Boyle  tur
       donusumlerine genellikle, atamali t"ur d"on"u,s"um"u diyoruz.)

       Eger tur donusumu AS IMPLICIT ile olusturulmussa, herhangi  bir  baglam
       icinde,  sadece  atama  ile  degil, bir ifadenin icinde kullanildiginda
       bile dolayli olarak boyle bir tur  donusumu  yapilabilir.  Ornegin,  ||
       isleci text turunde terimler aldigindan,

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

       eger  timestamp  turunden  text  turune donusum AS IMPLICIT imli olarak
       olusturulmussa, bu donusum mumkun olur. Aksi takdirde  tur  donusumunun
       dogrudan yazilmasi gerekir. Ornek:

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

       (Boyle tur donusumlerine genellikle, dolayli t"ur d"on"u,s"um"u diyoruz.)

       Tur  donusumlerini  dolayli olarak yapilmasi icin imlerken biraz tutucu
       olmakta fayda vardir. Dolayli donusumde bir asiri  bolluk,  cok  sayida
       yorumun   mumkun   olmasi   nedeniyle,  PostgreSQL'in  sasirtici  komut
       yorumlari secmesine ya da  komutlari  tamamen  cozumleyememesine  sebep
       olabilir.  En  iyisi  sadece  ayni  genel  tur  kategorisindeki  turler
       arasinda bilgi koruyan donusumler icin dolayli olarak cagrilabilen  bir
       tur  donusumu  yapmaktir.  Ornegin,  int2'den  int4'e  tur  donusumunun
       dolayli  olmasi  kabul  edilebilir,  fakat  float8'den  int4'e  donusum
       suphesiz  atama yoluyla yapilmalidir. text'den int4'e tur donusumu gibi
       farkli tur kategorileri arasindaki  tur  donusumunu  acikca  belirterek
       yapmak en iyisidir.

       Bir  tur  donusumunun  mumkun  olmasi  icin  kendi kaynak ve hedef veri
       turleriniz olmalidir. Ikilik olarak uyumlu tur donusumu  olusturabilmek
       icin  ise  ayricalikli  kullanici olmalisiniz. (Bu kisitlamanin sebebi,
       hatali yapilan  ikilik  uyumlu  tur  donusumlerinin  sunucunun  kolayca
       cokmesine sebep olmasidir.)

PARAMETRELER

       kaynak_t"ur
              Tur donusumunun kaynak veri turunun ismi.

       hedef_t"ur
              Tur donusumunun hedef veri turunun ismi.

       i,slev_ismi(arg_t"ur"u)
              Tur   donusumunu   gerceklestirecek  islev.  Islevin  ismi  sema
              nitelemeli  olabilir;  degilse,   islev   sema   arama   yolunda
              aranacaktir.  Islevin sonuc veri turu tur donusumunun hedef veri
              turu ile eslesmelidir. Argumanlar asagida aciklanmistir.

       WITHOUT FUNCTION
              Kaynak ve hedef turlerin ikilik olarak uyumlu oldugunu belirtir,
              boylece  tur  donusumunu  gerceklestirmek  icin bir isleve gerek
              kalmaz.

       AS ASSIGNMENT
              Tur    donusumunun    atama    baglaminda     dolayli     olarak
              uygulanabilecegini belirtir.

       AS IMPLICIT
              Tur   donusumunun   herhangi   bir   baglamda   dolayli   olarak
              uygulanabilecegini belirtir.

       Tur donusumu gercekleme islevleri bir, iki ya da uc argumanli olabilir.
       Ilk argumanin turu tur donusumunun kaynak veri turu ile ayni olmalidir.
       Varsa, ikinci arguman integer turunde olmalidir; hedef turle ilgili tur
       donusturucuyu,  yoksa  -1  degerini alir. Varsa, ucuncu arguman boolean
       turunde olmalidir; donusum acikca belirtilerek uygulanacaksa true, aksi
       takdirde   false  degerini alir. (Tuhaf bir bicimde, SQL belirtimi bazi
       durumlarda, dogrudan ve dolayli tur donusumleri icin farkli davranislar
       talep eder. Bu arguman boyle tur donusumlerini gerceklestirmesi istenen
       islevler icin saglanmistir. Kendi veri  turlerinizi  buna  konu  olacak
       sekilde tasarlamaniz tavsiye edilmez.)

       Normal  olarak  bir  tur donusumu farkli kaynak ve hedef veri turlerine
       sahip olmalidir. Yine  de,  donusumu  gerceklestirecek  islevin  birden
       fazla argumani olmasi durumunda, kaynak ve hedef veri turleri ayni olan
       tur donusumu bildirimlerine izin  verilir.  Bu,  sistem  kataloglarinda
       ture  ozel uzunluk zorlama islevlerini ifade etmekte kullanilir. Isimli
       islev, tur  degerini  ikinci  argumaninda  belirtilen  tur  degistirici
       degerine zorlamak icin kullanilir. (Dil kurallari sadece belli yerlesik
       veri turlerinin tur degistiricilere sahip olmasina izin verdiginden, bu
       ozellik  kullanici  tanimli  hedef  turlerde  kullanmak  icin degildir,
       burada butunlugu saglamak icin bahsettik.)

       Bir tur donusumu farkli  kaynak  ve  hedef  turleri  ile  birden  fazla
       arguman alan bir isleve sahip oldugunda, bir turden diger ture donusumu
       yaparken ayni adimda bir uzunluk zorlamasi da yapiliyor demektir. Boyle
       bir  girdi  mevcut  olmadigi  zaman,  bir tur donusumu kullanan bir tur
       zorlamasi iki  adim  gerektirir;  birincisinde  veri  turleri  arasinda
       donusum yapilir, ikincisinde tur degistirici uygulanir.

EK BILGI

       Kullanici   tanimli  bir  tur  donusumunu  kaldirmak  icin   DROP  CAST
       [drop_cast(7)] kullanilir.

       Turler arasindaki donusumun her iki yonde de yapilmasini  istiyorsaniz,
       her iki tur donusumunu acikca bildirmeniz gerektigini unutmayin.

       PostgreSQL  7.3  oncesinde, her islev bir veri turu ile ayni ismi alir,
       bu veri turunu dondurur ve farkli turde bir  arguman  alip  ozdevinimli
       olarak  bir tur donusum islevi olurdu. Bu uzlasim semalarin tanitimiyla
       ve  sistem  kataloglarinda  ikilik  uyumlu  tur  donusumlerinin   ifade
       edilebilmesi  icin  terkedildi.  Yerlesik tur donusum islevleri hala bu
       isimleme semasini kullaniyor olsa da, pg_cast sistem katalogunda da tur
       donusumleri olarak gosterilmis olmasi gerekir.

       Gerekli  olmadiginda,  tur  donusum  gercekleme islevlerinin hedef veri
       turunde isimlendirilmesi uzlasimini kullanmaya devam etmenizi oneririz.
       Cogu   kullanici,  t"urismi(x)  biciminde  veri  turlerini  donusturmeye
       alismistir. Bu yazim sekli  aslinda  bir  tur  donusumu  gerceklestirme
       islevi  cagrisindan  ne  eksik  ne de fazladir; bir tur donusumu olarak
       ozellikle ele alinmaz. Eger  sizin  donusum  islevleriniz  bu  uzlasima
       uygun   olarak  isimlendirilmemisse,  siz  sasirtici  kullanicilarsiniz
       demektir. PostgreSQL farkli  arguman  turlerine  sahip  islevlere  ayni
       ismin  verilmesine  izin verdiginden farkli veri turlerine donusum icin
       hepsi hedef veri turunde isimlendirilmis cok  sayida  donusum  islevine
       sahip olmanin bir zorlugu yoktur.

       Bilgi: Onceki  paragrafta  kucuk  bir zararsiz yalan vardir: pg_cast'in
              bir   gorunuste   islev   cagrisinin    anlamini    cozumlemekte
              kullanilacagi bir durum hala vardir. Eger isim(x) gibi bir islev
              cagrisi aslinda bir islevle eslesmiyorsa, fakat  isim  bir  veri
              turunun  ismiyse ve pg_cast x turunden bu ture bir ikilik uyumlu
              tur donusumunu  gosteriyorsa,  cagri  bir  acikca  tur  donusumu
              olarak yorumlanacaktir. Ikilik olarak uyumlu tur donusumleri bir
              isleve karsilik olmasalar bile islevsel  sozdizimi  kullanilarak
              cagrilabileceginden boyle bir olagandisilik vardir.

"ORNEKLER

       int4(text)  islevini  kullanarak  text  turunden  int4  turune  bir tur
       donusumu olusturmak icin:

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

       (Bu tur donusumu sistemde zaten onceden tanimlanmistir.)

UYUMLULUK

       SQL:1999'un  ikilik  uyumlu  turler  veya  gercekleme  islevlerinin  ek
       argumanlarini  hesaba  katmamasi  disinda,  CREATE  CAST  SQL:1999  ile
       uyumludur. AS IMPLICIT de bir PostgreSQL olusumudur.

SEE ALSO

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

,CEVIREN

       Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005