2012-03-24 12 views
6

Sono nuovo in PL/SQL e sto provando alcuni esempi pratici.
Ho poche domande riguardanti PL/SQL PROCEDURE & FUNCTION:quando devo andare per la procedura o la funzione in PL/SQL?

Quando devo andare per i PROCEDURE o FUNCTION?

Means, qualsiasi compito che sto facendo utilizzando FUNCTION la stessa operazione farà utilizzando PROCEDURE. allora perché dovrei andare per la funzione? è il loro qualche vantaggio di FUNCTION rispetto allo PROCEDURE in PL/SQL?

FUNCTION deve restituire il valore. Questo è l'unico vantaggio per l'utilizzo di una funzione o ci sono altri vantaggi delle funzioni?

risposta

5

Una funzione definita dall'utente, con alcune limitazioni, può essere utilizzata nelle istruzioni SELECT e nelle istruzioni PL/SQL IF mentre un PROCEDURE non può.

È possibile SELECT da un FUNCTION cioè CAST come una tabella utilizzando pipeline e PIPE ROW dichiarazioni, ma che è un avanzato caratteristica di PL/SQL è possibile utilizzare molto più tardi.

, consultare la documentazione per sviluppatori Oracle in linea in quanto è gratuito e molto buono: Developing and Using Stored Procedures

+0

Quali sono queste limitazioni? una procedura può fare tutto ciò che la funzione può e molto altro. per esempio puoi restituire una/e tabella/e come/i parametri/i di riferimento. Sono scettico nell'usare funzioni che potrebbero non produrre risultati deterministici, come i parametri di funzione che coinvolgono data/ora. In una procedura, non si dispone di tali limiti. La riga del tubo è una delle più semplici. La tua risposta è più scoraggiante che incoraggiare il pubblico dei neofiti. – TonyP

+2

@TonyP Per qualcuno che non conosce le basi di PL/SQL, non ho intenzione di espandere i dettagli di Function pragma settings et al - http://docs.oracle.com/cd/B12037_01/appdev.101/b10807 /13_elems039.htm- La mia risposta per fornire una direzione per l'apprendimento aggiuntivo e non uno sportello unico Clif nota la versione di tutto questo. – tawman

+0

@jonearles Grazie per la modifica sulla pipeline * funzione * – tawman

2
  1. Una funzione restituirà un valore, A "value" hanno essere una delle molte cose tra cui tavoli PL/SQL, cursori ecc ref Aggiunta a tale scopo, è possibile utilizzare una funzione nelle istruzioni SQL, mentre le procedure non possono essere utilizzate.
  2. Le procedure vengono utilizzate per eseguire la business logic, in cui è possibile restituire più valori dalla procedura utilizzando i parametri OUT o IN OUT.
  3. Personalmente utilizzo la funzione per i calcoli. Ad esempio: verifica una condizione specifica come il recupero di un valore in base alla condizione, controllando la condizione per vero o falso.
  4. È possibile avere istruzioni DML (inserire, aggiornare, eliminare) in una funzione. Ma non è possibile chiamare tale funzione in una query SQL. * Ad esempio: se si dispone di una funzione che sta aggiornando una tabella, non è possibile chiamare tale funzione in alcuna query SQL.

    select myFunction(field) from sometable; --will throw error. 
    

Si tratta della scelta se utilizzare procedure o una funzione dipende da voi e il vostro requisito comfortability.

+0

È possibile utilizzare DML e DDL in una funzione utilizzata in un'istruzione SQL, ma è necessario dichiararlo AUTONOMOUS_TRANSACTION. (Anche se sarebbe una pessima idea fare una cosa del genere.) –

+2

il punto 5 è sbagliato. È possibile eseguire ddl nelle funzioni allo stesso modo delle procedure. –

+0

@FlorinGhita: Grazie modificherò questo nella mia risposta –

0

vantaggi principali:

  1. funzione si deve restituire un valore in cui come procedura può o non può restituire un valore.
  2. Funzione utilizzata principalmente per il calcolo di valori. Dove come procedura utilizzata principalmente per la logica di business esecutivo.
  3. Funzione per ritrarre un valore dove come procedura per il manupliamento di un valore.
  4. Funzione deve restituire solo un valore ma accetta molti tipi di restituzione.
-1

C'è più vantaggio di utilizzare procedure sulla funzione:

  1. Se vogliamo eseguire l'istruzione SQL dinamico utilizzando eseguirà istruzione immediato allora usiamo procedura .E non può fare all'interno della funzione.

  2. La procedura può essere eseguita indipendentemente, mentre una funzione deve essere parte di un'istruzione eseguibile, in quanto non può essere eseguita in modo indipendente.

-1

la funzione deve restituire un valore utilizzato per il calcolo utilizzato. Funzione deve restituire solo un valore ma accetta molti tipi di ritorno. Funzione possiamo usare l'istruzione select. procedura può o non può restituire un valore. La procedura è che possiamo usare le operazioni dml. procedura che possiamo eseguire solo.

+1

È molto difficile capire cosa stai cercando di dire. –

-3

Ovviamente è possibile eseguire sql dinamico in una funzione. Scrivi una semplice funzione per fare il test e vedrai che funziona.

È possibile utilizzare la funzione o la procedura la maggior parte del tempo. Le differenze sono se si desidera utilizzarle in un'istruzione SQL o in un'istruzione IF, quindi utilizzare una funzione. Altrimenti usa ciò che meglio ti conviene e l'applicazione chiamante.

+0

Hai sbagliato tutto – Bren

4

Vorrei chiarire che la risposta per l'utilizzo di una stored procedure o di una funzione dipende completamente dai requisiti aziendali e dal flusso di lavoro di progettazione, a condizione che l'obiettivo del programma sia chiaro. Se non sei chiaro sul tuo obiettivo, proprio come è la tua domanda, nessuna quantità di procedure e funzioni di codifica sarebbe utile.

È necessario notare che le stored procedure e le funzioni hanno scopi diversi nella programmazione PL/SQL. Questi sono i seguenti:

  1. Le stored procedure:

    a. Le stored procedure rappresentano blocchi denominati (anziché blocchi anonimi) che sono in grado di accettare parametri e lavorarci sopra.

    b. Le stored procedure definiscono un flusso di lavoro procedurale indipendente in cui è possibile eseguire una serie di operazioni DML e/o altre operazioni.

    c. Le stored procedure non devono restituire un valore. Quindi, non possono essere richiamati da all'interno di un'istruzione SQL. Le stored procedure devono essere eseguite da un blocco PL/SQL o anonime.

    d. Meriti:

    • Una procedura non deve restituire un valore (Questo può essere anche un demerito).
    • Può essere utilizzato per eseguire una serie di operazioni DML o DDL (sì, ciò è possibile tramite SQL dinamico con alcune restrizioni).
    • Può essere semplicemente chiamato come un'istruzione indipendente da un blocco PL/SQL. per esempio,

      myProcedure (x, y); 
      

    e.Demeriti:

    • Impossibile richiamare da una query SQL: DML o un'istruzione SELECT.
    • Non può essere utilizzato negli indici.
  2. Funzioni:

    a. Le funzioni sono blocchi denominati che sono in grado di accettare parametri e restituire un valore.

    b. Le funzioni definiscono anche un flusso di lavoro procedurale, ma quando vengono utilizzate nelle istruzioni SQL, non è possibile eseguire alcun DML o DDL.

    c. Una funzione deve essere chiamata da un'istruzione SQL o PL/SQL in cui viene utilizzato il valore restituito dalla funzione, ad esempio, assegnato a una variabile, passato come parametro, ecc.

    d. Meriti:

    • Può essere utilizzato in una query SQL - DML o un'istruzione SELECT.
    • Può essere utilizzato negli indici basati su funzioni se la funzione è deterministica (ovvero per un insieme definito di input la funzione restituisce lo stesso output ogni volta che viene chiamato).

    e. Demeriti:

    • Se la funzione chiamata da una query SQL contiene un DML, la query non riesce.
    • È obbligatorio per una funzione restituire un valore. Quindi una chiamata di funzione non può essere un'istruzione indipendente come una chiamata di procedura.

Per ulteriori riferimenti, visitare Oracle Docs.

0

Ogni volta che si desidera restituire un valore e utilizzare ulteriormente tale valore, passare alla funzione. Se vuoi restituire un valore come risultato finale, vai alla procedura.

Problemi correlati