Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    16

    [PostgreSQL] creare una funzione che ritorni il risultato di una select

    Ciao ragazzi, ringrazzio tutti coloro che mi hanno sempre e prontamente risposte in tutti gli altri post che ho creato. Oggi vi chiedo se è possibile e come, creare una function in PostgreSQL che restituisca il risultato di una select.

    Spiego cosa devo fare: Nella function devono essere eseguite tre attività, due inserimenti che sono coordinati (cioè il primo inserimento implica la realizzazione di un secondo inserimento) e successivamente voglio aggiungere una select che mi visualizza il risultato dei due insert appena fatti.

    Ora poichè i due insert sono coordinati, dovre utilizzare all'interno della funzione anche le transazioni, così se il secondo insert non va a buon fine anche il primo non viene memorizzato.

    Inoltre, con il secondo insert devo memorizzare delle informazioni su colui che stà eseguendo l'operazione, quindi vorrei sapere come faccio (se esiste quanlche comando) ad ottenere il nome del soggetto che stà eseguendo l'operazione in quel momento.

    Vi ringrazio.

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    16
    Sono riuscito a fare questo:

    CREATE OR REPLACE FUNCTION addgruppo(newgruppo character varying, areatematica character varying, utente demail)
    RETURNS SETOF gruppo AS $$
    DECLARE rw gruppo%rowtype;
    DECLARE new_index INTEGER := 0;
    BEGIN
    INSERT INTO gruppo(nomegruppo, tematica) VALUES (newGruppo, areatematica);
    new_index := currval('gruppo_idgruppo_seq'::regclass);
    INSERT INTO fondazione(idgruppo, fondatore) VALUES (new_index, utente);
    FOR rw IN SELECT * FROM gruppo WHERE nomegruppo = newgruppo
    LOOP
    RETURN NEXT rw;
    END LOOP;
    RETURN;
    END; $$
    LANGUAGE 'plpgsql';

    Questa già funziona ma devo ancora rendere il tutto atomico (agg. le transaction) ed inoltre non sono soddisfatto del LOOP che vorrei togliere (ma non ci riesco senza necessariamente compromettere la funzione) perchè vorrei visualizzare la sola riga inserita senza dover ricorrere al loop (esso sarebbe utile se dovessi visualizzare tutti i record in tabella). Inoltre vorrei visualizzare la riga del JOIN tra la tabella gruppo e fondazione.

    Qualche suggerimento???? Vi ringazio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.