Ciao a tutti,
per motivi di lavoro sto continuando il progetto di un mio ex-collega, il problema è che questo progetto utilizza Postgresql e io non ho conoscenze in merito.
In particolare dovrei modificare una funzione che ha scritto lui ma i miei tentativi non stanno portando a nessuna conclusione, mi potete aiutare?
Questo è il codice scritto dal mio ex-collega
codice:
-- Function: menu.get_nav_menu(integer)
-- DROP FUNCTION menu.get_nav_menu(integer);
CREATE OR REPLACE FUNCTION menu.get_nav_menu(menu_id integer)
RETURNS SETOF menu.v_vocimenu AS
$BODY$
DECLARE
id_padre integer;
qry text;
r menu.v_vociMenu%rowtype;
BEGIN
FOR r in select * from menu.v_vociMenu
where id_menu = $1
LOOP
RETURN QUERY SELECT * FROM menu.get_nav_menu(r.padre);
IF r.padre = 0 THEN
RETURN NEXT r;
EXIT;
END IF;
RETURN NEXT r;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION menu.get_nav_menu(integer) OWNER TO postgres;
Mi sono accorto che l'errore si genera perchè fa il controllo in un unico campo nella where quindi la query è sbagliata, ho provato a modificarlo in questo modo
codice:
-- Function: menu.get_nav_menu(integer, integer)
-- DROP FUNCTION menu.get_nav_menu(integer, integer);
CREATE OR REPLACE FUNCTION menu.get_nav_menu(id_utente integer, menu_id integer)
RETURNS SETOF menu.v_vocimenu AS
$BODY$
DECLARE
id_padre integer;
qry text;
r menu.v_vociMenu%rowtype;
BEGIN
FOR r in select * from menu.v_vociMenu
where id_utente = $1 and id_menu = $2
LOOP
RETURN QUERY SELECT * FROM menu.get_nav_menu(r.padre);
IF r.padre = 0 THEN
RETURN NEXT r;
EXIT;
END IF;
RETURN NEXT r;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION menu.get_nav_menu(integer, integer) OWNER TO postgres;
ora però mi restituisce questo errore
codice:
ERROR: sql error DETAIL: ERROR: la funzione menu.get_nav_menu(integer) non esiste LINE 1: SELECT * FROM menu.get_nav_menu( $1 ) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. QUERY: SELECT * FROM menu.get_nav_menu( $1 ) CONTEXT: PL/pgSQL function "get_nav_menu" line 32 at RETURN QUERY CONTEXT: funzione SQL "f_get_nav_menu" istruzione 1
sono 2 giorni che ci sbatto la testa
mi potete aiutare?
ciao e grazie