2013-01-06 21 views
6

select * from customers gibi basit bir seçim sorgusunu pg olarak saklı bir yordama/işleve nasıl dönüştürebilirim?Satırları döndürmek için basit PostgreSQL işlevi

Postgres'e yeniyim ve create function customers() as returns table/setof sadece doğru ve bu yüzden burada soru sormadım.

Anlatımların pg arazisinde "işlevler" olarak adlandırıldığını anlıyorum. Dolayısıyla, create procedure mevcut değil ve tek seçeneklerim bir görünüm veya işlev oluşturmaktır. Sorun, create function x() returns setof y numaralı öğenin, virgülle ayrılmış, daha fazla işlenmeden kullanılamayan değerler dizisi döndürmesidir (en azından pgAdmin ve Ruby/Sequel'de görüyorum). Gerektirmeyen satır tanımını dahil etmeyi gerektirir.

Tüm bunların ardında bir neden olduğuna eminim ama en yaygın kullanım durumunun bu kadar zor olduğuna şaşırdım.

+3

[Ne denediniz?] (Http://whathaveyoutried.com) –

+2

@rebnoob "Çalışılmadı" yerine - çalıştığınız işlevin tam metnini ve sonuçta oluşan hata mesajını ** belirtin ** PostgreSQL sürümünüz gibi. –

+0

Harika! Teşekkür ederim Erwin ve Craig. – rebnoob

cevap

11

Untested ancak sağ hakkında olmalıdır:

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$ 
SELECT * FROM customers; 
$$ LANGUAGE sql; 
+2

bu eser, teşekkür ederim. Fakat pg, gerçek sütunlar yerine virgülle ayrılmış değerler içeren tek bir sütun döndürüyor gibi görünüyor, ne veriyor? – rebnoob

+1

@rebnoob 'SELECT x FROM getcustomers() x' gibi bir şeyle diyorsunuz. SELECT getcustomers(); 'veya' SELECT * getcustomers(); 'kullanmak istediğinizde. –

11

sorun "y SETOF döner) (fonksiyonu x oluşturmak" olduğu olmadan kullanılamaz bir paren'd virgülle ayrılmış sıra değerleri döndürür işleme fonksiyonu rekor/satır türü döndürür yana

ayrıca, sen

ile aramak zorunda İade edilen sırayı ayrı ayrı sütunlara ayrıştırmak için

.

manual on CREATE FUNCTION iyi bir başlangıç ​​noktası olmalıdır. Örnek bölüm bu konuyu kapsar.

+0

Siz efendim .. bir jedi ve hesaba katmak için zor! – faizanjehangir