2013-01-06 16 views
6

Jak przekonwertować proste zapytanie wybrane, takie jak select * from customers, do zapisanej procedury/funkcji w pg?Prosta funkcja PostgreSQL do zwracania wierszy

Jestem nowy w Postgres i create function customers() as returns table/setof po prostu nie czuję się dobrze, a tym samym pytanie tutaj.

Rozumiem, że procy nazywane są "funkcjami" na pg ziemi. Tak więc create procedure nie istnieje i jedynymi opcjami są albo utworzenie widoku, albo funkcji. Problem polega na tym, że create function x() returns setof y zwraca wiersz wartości oddzielonych przecinkami, których nie można użyć bez dalszego przetwarzania (przynajmniej to widzę w pgAdmin i Ruby/Sequel).

create function x() returns table(...) wymaga osadzenia definicji wiersza, której nie chcę.

Jestem pewien, że istnieje ku temu powód, ale jestem zaskoczony, że najczęstszym przypadkiem użycia jest to trudne.

+3

[Co próbowałeś?] (Http://whathaveyoutried.com) –

+2

@rebnoob Zamiast "nie działał" - podaj ** pełny tekst wypróbowanej funkcji i wynikowy komunikat błędu ** as oraz twoja wersja PostgreSQL. –

+0

Świetnie! Dziękuję Erwin i Craig. – rebnoob

Odpowiedz

11

Nietestowane ale powinno wynosić około prawej:

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

to działa, dziękuję. Ale pg wydaje się zwracać tylko jedną kolumnę z wartościami przecinka zamiast rzeczywistych kolumn, co daje? – rebnoob

+1

@rebnoob Nazywasz to czymś w rodzaju 'SELECT x FROM getcustomers() x'. Chcesz użyć 'SELECT getcustomers();' lub 'SELECT * FROM getcustomers();'. –

11

Zagadnienie to „tworzenie funkcji X() zwraca setof Y” zwraca paren'd oddzielony przecinkami wartości rzędu, które nie mogą być stosowane bez dalej przetwarzanie

Ponieważ funkcja zwraca typ rekordu/wiersz, trzeba nazwać z

SELECT * FROM getcustomers(); 

, aby rozłożyć zwracany wiersz na poszczególne kolumny.

Punktem wyjścia powinien być manual on CREATE FUNCTION. Sekcja przykładowa omawia ten temat.

+0

Ty sir ... jesteś jedi i siła, z którą musisz się liczyć! – faizanjehangir

Powiązane problemy