Provided by:
manpages-tr_1.0.5.1-2_all 
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