O F0 belirtmek ve f1 tipi bigint olan nasılPostgreSQL'de CTE (Ortak Tablo İfadeleri) için sütun türleri nasıl belirlenir?
WITH t (f0, f1) as (
values
(1, 10),
(2, 20)
)...
düşünün?
O F0 belirtmek ve f1 tipi bigint olan nasılPostgreSQL'de CTE (Ortak Tablo İfadeleri) için sütun türleri nasıl belirlenir?
WITH t (f0, f1) as (
values
(1, 10),
(2, 20)
)...
düşünün?
ben size durumda DEĞERLER ifadenin içinde türlerini belirtmek zorunda düşünüyorum:
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)...
Yalnızca, PostgreSQL kalanını çıkarabiliriz değerlerin ilk sette türleri gerekir.
Örneğin, iki işlevi olduğunu varsayalım:
WITH t (f0, f1) as (
values
(1::bigint, 10::bigint),
(2, 20)
)
select f(f0, f1) from t;
sana iki bigint
bildirimler verecek oysa
create function f(bigint, bigint) returns bigint as $$
begin
raise notice 'bigint';
return $1 * $2;
end;
$$ language plpgsql;
create function f(int, int) returns int as $$
begin
raise notice 'int';
return $1 * $2;
end;
$$ language plpgsql;
Sonra
WITH t (f0, f1) as (
values
(1, 10),
(2, 20)
)
select f(f0, f1) from t;
sana iki int
bildirimlerini verecektir.
Yalnızca ilk satırdaki yazı tipine ihtiyacınız var: '(1 :: bigint, 10 :: bigint), (2, 20)' beklediğiniz gibi çalışır. (Tek bir sütundaki tüm değerler tek tiptir.) PgAdmin, çıkan veri tipini çıktı sekmesinde görüntüler. –
@Catcall: Evet, bu mantıklı, sütunlar sütunlar ve hepsi. –
Teşekkür ederim @muistooshort, işe yarıyor! Süper garip bulduğum şey, elde ettiğim hatanın "operatör var değil: bigint = text" idi, ki bu biraz beklenmedik (int sonucunu anlamış olursunuz). Bunu epgsql (Erlang) 'dan (tamsayı argümanları ile) çağırıyorum, bu yüzden şimdilik sürücüyü suçlayacağım. Her şeyi bigint'e dökerek sorunu çözdüm, ancak çözümleriniz çok daha temiz. #Catcall - mantıklı, bahşiş için teşekkürler! Erlang'da sorguyu oluşturduğum düşünüldüğünde, muhtemelen şu anki değerinden daha fazla sorun var. –
bu sizin için çalışır, ancak
WITH CTE AS (
SELECT
'Apple' AS STRING1
,CAST('Orange' AS VARCHAR(10000)) AS STRING2
FROM SYSIBM . SYSDUMMY1)
SELECT * FROM CTE
Bahsedilen yöntemin size nasıl yardımcı olduğu hakkında ek bilgi sağlayın. – Leb
Bir CTE bir yalnız bir yapıya ziyade TSQL kısayol durmak değil DB2 benim için çalıştı belirtin istediğiniz sütunu döküm eğer bilmiyorum. Tek başına bir yapı istiyorsanız TVP veya #TEMP. – Paparazzi
@Blam: CTE'ler SQL-Server/TSQL'e özgü değildir, bunlar SQL standardının parçasıdır. –
@muistooshort - sonra soruyu yanlış anladım ya da sorduğumdan emin değilim, yorumlarımı siliyorum. Açık veri türü olabilecek bağlantıyı işaret etmek istedim, veri türü yanlış eşleşmesine neden olacak, herşeyi işaretlediğiniz için teşekkürler, şerefe! –