2012-09-04 14 views
5

Ho bisogno di un metodo generalizzato per ottenere l'elenco dei parametri di runtime (valori) quando chiamo una procedura. Ho bisogno di qualcosa di simile al $ PLSQL_UNIT che restituisce il nome della procedura in esecuzione. (plsql Oracle 10g)oracle plsql: richiama i valori dei parametri di runtime quando si chiama una procedura

E.g. un'occhiata a questa procedura di esempio: (la stampa semplicemente il proprio nome e parametri)

CREATE OR REPLACE PROCEDURE MY_PROC(ow in varchar2, tn IN varchar2) 
IS 

BEGIN 
    dbms_output.put_line('proc_name: '||$$PLSQL_UNIT||' parameters: '|| ow||' '||tn ); 

    EXCEPTION 
    WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE('ERRORE: ' ||SQLERRM); 

END MY_PROC; 
/

rodaggio produce il seguente output:

SQL> 
    1 BEGIN 
    2  IBAD_OWN.MY_PROC('first_par', 'second_par'); 
    3 END; 
    4/

proc_name: MY_PROC parameters: first_par second_par 

PL/SQL procedure successfully completed. 

non mi soddisfa perché non riesco a copiare e incollare tutte le mie procedure perché devo codificare in modo rigido ogni procedura per impostare le loro variabili parametro corrette.

Grazie in anticipo per l'aiuto.

+1

possibile duplicato di http://stackoverflow.com/questions/12160928/get-a-parameters-name/? – tbone

+0

sì, penso che sia la stessa domanda. Entrambi senza risposta :(Penso che non ci sia un modo per ottenere il valore dei parametri :( – tortugone

+1

Non penso che sia la stessa domanda: stai chiedendo il valore di un parametro senza conoscere il suo nome. in a, ora cancellato, risposta e nella domanda collegata trovare il nome di un parametro è semplice ma non il valore di quel parametro – Ben

risposta

2

Non è possibile recuperare in modo dinamico i valori dei parametri passati a una procedura in Oracle PL/SQL. Il linguaggio semplicemente non è progettato per gestire questo tipo di operazione.

Per inciso, in una procedura che si trova all'interno di un pacchetto, $$PLSQL_UNIT restituirà solo il nome del pacchetto. Trovo che sia meglio definire una costante con nome coerente all'interno di ogni procedura che contiene il nome della procedura.

1

Quando volevo la stessa funzionalità della tua non ho trovato nessuna buona soluzione integrata.

Quello che ho fatto è: scritto trigger a livello di DB che modifica il corpo originale della funzione/procedura/pacchetto. Questo trigger si aggiunge immediatamente dopo "Inizia" pezzo di codice generato dinamicamente da "user_arguments".

Inoltre, dopo di che includo in questo trigger il codice, che registra le chiamate di proc quando si verifica un'eccezione.

Inoltre, è possibile rintracciare le chiamate procs e molte altre cose interistenti.

Ma questa soluzione funziona bene solo per la preproduzione in quanto le prestazioni diminuiscono drasticamente.

PS. Scusa per il mio cattivo inglese.

+0

Potresti pubblicare il tuo codice? – Jesse

Problemi correlati