1

Temat: Funkcja sql zwracanie recordów

Witam napisałem sobie funkcje wyszukującą ID w tabeli ale mam taki problem funkcja ta zwraca mi tylko jeden rekord zamiast zbioru rekordów z zadanym numerze oto funkcja :

CREATE OR REPLACE FUNCTION functionSELECT()
  RETURNS integer AS
'select "NUMER" FROM "TABELANUMEROW" WHERE "NUMER"=$PARAMETR;'
  LANGUAGE 'sql';
ALTER FUNCTION functionSELECT() OWNER TO "Admin";

Wiem że problem polega na tym iż funkcja zwraca wartość integer a chciałbym żeby zwracała zbiór rekordów zawierających jedynie kolumnę NUMER ograniczoną warunkiem WHERE nic poza tym. Nie wiem jaki typ danych użyć gdy użyję konstrukcji :

CREATE OR REPLACE FUNCTION functionSELECT()
  RETURNS SETOF "TABELANUMEROW" AS
'select "NUMER" FROM "TABELANUMEROW" WHERE "NUMER"=$PARAMETR;'
  LANGUAGE 'sql';
ALTER FUNCTION functionSELECT() OWNER TO "Admin";

Funkcja się sypie i to zrozumiałe dla tego bo tabela TABELANUMEROW posiada więcej kolumn niż tylko jedną "NUMER".

Rozwiązania poszukałem w perspektywie :

CREATE OR REPLACE VIEW "TYLKONUMER" AS
SELECT "TABELANUMEROW"."NRUMER"
   FROM "TABELANUMEROW";

ALTER TABLE "TYLKONUMER" OWNER TO "Admin";


I funkcja do tego :

CREATE OR REPLACE FUNCTION functionSELECT()
  RETURNS SETOF "TYLKONUMER" AS
'select "NUMER" FROM "TABELANUMEROW" WHERE "NUMER"=$PARAMETR;'
  LANGUAGE 'sql';
ALTER FUNCTION functionSELECT() OWNER TO "Admin";

I to działa tak jak powinno.

Ale teraz podstawowe pytanie czy da się zrobić taką funkcję bez definiowania perspektywy ?? Jakiego typu użyć by zwróciła zbiór rekordów w postaci jednej kolumny z tabeli wielokolumnowej ??

Ostatnio edytowany przez Rady (2008-10-01 19:11:38)

2

Odp: Funkcja sql zwracanie recordów

a nie możesz zwracać typ setof integer?

3

Odp: Funkcja sql zwracanie recordów

Dzięki o to właśnie chodziło czemu ja to przeoczyłem smile Wystarczyło dać SETOF integer smile Jeszcze raz dzięki smile

4

Odp: Funkcja sql zwracanie recordów

A w jaki sposób można przekazać do funkcji nazwę kolumny jako parametr , jakiego typu powinien być parametr ??