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
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 modocodice:-- 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;
ora però mi restituisce questo errorecodice:-- 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;
sono 2 giorni che ci sbatto la testacodice: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 1mi potete aiutare?
ciao e grazie