Portál AbcLinuxu, 26. prosince 2025 12:43
CREATE OR REPLACE FUNCTION pokus(varchar) RETURNS int4 AS '
DECLARE
v ALIAS FOR $1;
BEGIN
SELECT AsText(the_geom) FROM v;
RETURNS 0;
END;
' LANGUAGE plpgsql;
SELECT pokus('b');
ERROR: syntax error at or near "$1" at character 32
QUERY: SELECT Astext(the_geom) FROM $1
CONTEXT: PL/pgSQL function "pokus" line 4 at SQL statement
LINE 1: SELECT Astext(the_geom) FROM $1
^
Budu vdecny za jakykoliv podnet. Predem dekuji.
Pokud nekdo tusi co s tim, tak bych byl rad za jakoukoliv radu.
Dekuju
CREATE OR REPLACE FUNCTION pokus(varchar) RETURNS integer AS '
DECLARE
v ALIAS FOR $1;
x INTEGER;
BEGIN
EXECUTE ''SELECT id INTO x FROM '' || v || '' LIMIT 1'';
RETURN x;
END;
' LANGUAGE plpgsql;
Pozor! SELECT INTO v PostgreSQL 7.4.8 ještě není implementováno. Lepší by asi bylo použít nějaký cyklus (v tomto případě)... RTFM a take it easy
CREATE OR REPLACE FUNCTION mujpokus(varchar) RETURNS varchar AS '
DECLARE
v ALIAS FOR $1;
x INTEGER;
BEGIN
EXECUTE ''SELECT AsText(the_geom) INTO x FROM '' || v || '' LIMIT 1'';
RETURN x;
END;
' LANGUAGE plpgsql;
mi to hodi tuto hlasku:
kam038=# SELECT mujpokus('b');
ERROR: EXECUTE of SELECT ... INTO is not implemented yet
CONTEXT: PL/pgSQL function "mujpokus" line 5 at execute statement
Tak to vypada ze to neimplementovali ani sem
Ale dik za radu, zajimalo by me, jestli je mozny nak ziskat vystup z ty funkce spusteny v EXECUTE. Zkousel jsem FOUND bez toho SELECT INTO a nic.
Sem si myslel, ze to je uplne kravina resitelna bez problemu ale vypada to, ze tenhle jazyk ma pomerne velky omezeni. Nevite v cem by se podobna vec mohla napsat pokud mozno bez vetsich problemu?
. Dokumentace je vážně dobré místo, kde začít.
FOR record_or_row IN EXECUTE text_expression LOOP
statements
END LOOP;
Proto ten FOR...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.