ďťż
 
Postgres funkcja skladowana zwracajaca wynik zapytania SQL ďťż
 
Postgres funkcja skladowana zwracajaca wynik zapytania SQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Postgres funkcja skladowana zwracajaca wynik zapytania SQL



Arek - 13-07-2007 00:01
Postgres funkcja skladowana zwracajaca wynik zapytania SQL
  Moja aplikacja (Java) korzysta z bazy postgres poprzez JDBC.
Dotychczas pobieralem dane poprzez zapytania SQL bezposrednio w programie
ale chcialbym do tego celu uzyc funkcji skladowanych na bazie.
Czy moglby mi ktos podac jakis przyklad funkcji skladowanej na bazie
Postgres
zwracajacej wynik zapytania SQL?

--
Arek





hubert depesz lubaczewski - 13-07-2007 00:01

  On 2007-07-12, Arek <arek_m1@wp.pl> wrote:
> Czy moglby mi ktos podac jakis przyklad funkcji skladowanej na bazie
> Postgres
> zwracajacej wynik zapytania SQL?

hmm .. a co z manuala jest niejasne?
robisz po prostu return next record; i już.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




Arek - 13-07-2007 00:01

 
Użytkownik "hubert depesz lubaczewski" <depesz@depesz.com> napisał

> robisz po prostu return next record; i już.
>
Dzieki za odpowiedz.
Jestem poczatkujace w Postgresie i akurat tego tematu za bardzo nie
rozumiem.
Uzycie funkcji skladowanych zwracajacych proste typy lub void juz opanowalem
ale zwrocenie wynikow zapytania na razie jest dla mnie za trudne.
Jesli mozesz pokaz mi jak powinna wygladac ponizsza funkcja aby zwrocila mi
zawartosc kursora rec1.

CREATE OR REPLACE FUNCTION ap_test1(ppm integer)
RETURNS ???????????? AS
$BODY$
BEGIN
for rec1 in
select * from vfm_users u
where u.id=ppm
loop
-----
-----
end loop;
return ????????????;
END;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;




A.L.E.C - 13-07-2007 00:01

  Arek wrote:

> Jestem poczatkujace w Postgresie i akurat tego tematu za bardzo nie
> rozumiem.

Za faq:

CREATE OR REPLACE FUNCTION test_srf() RETURNS SETOF RECORD AS '
DECLARE
temprec RECORD;
BEGIN
for temprec in SELECT oid, lanname FROM pg_language loop
RETURN next temprec;
END loop;
RETURN;
END;
' language 'plpgsql';

SELECT * FROM test_srf() x(pole1 oid, nazwa name);

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl





Arek - 13-07-2007 00:01

 
Użytkownik "A.L.E.C" <alec1@poczta.onet.pl> napisał
>
> CREATE OR REPLACE FUNCTION test_srf() RETURNS SETOF RECORD AS '
> DECLARE
> temprec RECORD;
> BEGIN
> for temprec in SELECT oid, lanname FROM pg_language loop
> RETURN next temprec;
> END loop;
> RETURN;
> END;
> ' language 'plpgsql';
>
> SELECT * FROM test_srf() x(pole1 oid, nazwa name);
>

Niezmierne dzieki, wlasnie o taki przyklad mi chodzilo.
--
Arek




Arek - 13-07-2007 00:01

 
Użytkownik "A.L.E.C" <alec1@poczta.onet.pl> napisał
> Za faq:
>
> CREATE OR REPLACE FUNCTION test_srf() RETURNS SETOF RECORD AS '
> DECLARE
> temprec RECORD;
> BEGIN
> for temprec in SELECT oid, lanname FROM pg_language loop
> RETURN next temprec;
> END loop;
> RETURN;
> END;
> ' language 'plpgsql';
>
> SELECT * FROM test_srf() x(pole1 oid, nazwa name);
>

Jeszcze raz.
Przeczytalem ten tekst z ktorego wziales ten przyklad ale tam jest chyba cos
pokrecone.
Pisza ze:
Dodatkowo należy pamiętać, że select'y z funkcji muszą zawierać alias pod
jakim dane z funkcji mają być widziane (x) oraz specyfikacje tabel (nazwy
pól i typy danych).

Tak wlasnie zrobilem i niestety zawsze dostaje komunikat:

ERROR: wrong record type supplied in RETURN NEXT
Stan SQL:42804
Kontekst:PL/pgSQL function "ap_test1" line 6 at return next

Zalaczam moj przyklad:

--DROP FUNCTION ap_test1(ppm bigint);
CREATE OR REPLACE FUNCTION ap_test1(ppm bigint) RETURNS SETOF RECORD AS '
DECLARE
temprec RECORD;
BEGIN
for temprec in SELECT u.pm, u.name FROM vfm_users_departament u
WHERE U.PM=PPM loop
RETURN next temprec;
END loop;
RETURN;
END;
' LANGUAGE 'plpgsql';
ALTER FUNCTION ap_test1(ppm bigint) OWNER TO postgres;

SELECT * FROM ap_test1(591) x(pole1 bigint, pole2 text);

Mysle ze Ty tego nie probowales.

Masz jakies sugestie jak to powinno dzialac?

--

Arek




Arek - 13-07-2007 00:01

 
Użytkownik "A.L.E.C" <alec1@poczta.onet.pl> napisał
> Za faq:
>
> CREATE OR REPLACE FUNCTION test_srf() RETURNS SETOF RECORD AS '
> DECLARE
> temprec RECORD;
> BEGIN
> for temprec in SELECT oid, lanname FROM pg_language loop
> RETURN next temprec;
> END loop;
> RETURN;
> END;
> ' language 'plpgsql';
>
> SELECT * FROM test_srf() x(pole1 oid, nazwa name);

Jeszcze raz.
Najmocniej przepraszam, juz dziala.
W selekcie:
SELECT * FROM ap_test1(591) x(pole1 bigint, pole2 text);
typ pola 1 i pola 2 powinien byc dokladnie identyczny jak to pole
zdefiniowane jest w tabeli z ktorej popchodzi. U mnie pole2 w tabeli bylo
typu
character varying(255) a ja w selekcie dalem "text" sadzac ze w nim miesci
sie rowniez pole nieco ograniczone.

--
Arek
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?= ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • oefg.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com