2015-09-24 13 views
6

Alcuni strumenti di programmazione come C# o Java possono contrassegnare procedure/funzioni come deprecate. Ma Oracle PLSQL non ha funzionalità incorporate per questo. Mi chiedo che ci sia un altro modo per supportare questa funzione.Contrassegna procedura/funzione PLSQL come obsoleto

Voglio che vengano visualizzati come "Gli avvisi del compilatore PL/SQL su qualsiasi codice PL/SQL in fase di compilazione".

96/43 PLW-06005: inlining of call of procedure 'TEST' was done 
+2

io non sono a conoscenza n sia con C# che con Java. Potresti chiarire cosa ti aspetti che succeda quando una subroutine PL/SQL viene contrassegnata come deprecata. – user272735

+0

Hai incontrato questo thread del forum di Oracle? https://community.oracle.com/thread/2342126 – ozy

+0

@ user272735 ha aggiunto ulteriori dettagli alla domanda. –

risposta

4

In Oracle rilasciare 12.2, c'è un nuovo pragma per questo:

pragma deprecate (deprecated_thing, 'Message to other developers'); 

... dove deprecated_thing è un qualsiasi identificatore PL/SQL.Le seguenti cose possono essere obsoleti:

  • Sottoprogrammi
  • Pacchetti
  • Variabili
  • Costanti
  • Tipi
  • Sottotipi
  • Eccezioni
  • cursori

Ad esempio:

CREATE OR REPLACE PACKAGE old_package AS 
PRAGMA DEPRECATE(old_package , ’Package old_package has been deprecated in favor of new_package’); 
    PROCEDURE p1; 
    PROCEDURE p2; 
END old_package; 

Chiunque tenti di compilare qualcosa che utilizza qualsiasi cosa tu abbia deprecato riceveranno un avviso PL/SQL nella gamma di PLW-6019 a PLW-6022.

È possibile attivare questi avvisi come segue, in modo che si vedrà quando si tenta di compilare il codice:

alter session set plsql_warnings = 'enable:(6019,6020,6021,6022)'; 

In alternativa, è possibile impostare la sessione per il trattamento di questi avvertimenti come errori:

alter session set plsql_warnings = 'error:6020'; 

alternativa, è possibile impostare l'oggetto stesso per rendere chiunque di utilizzarlo per ottenere un errore:

alter package <package with deprecated stuff> compile plsql_warnings = 'error:6020' reuse settings; 
-1
dbms_output.put_line('This function is deprecated'); 
+0

dbms_output non viene eseguito quando il codice viene compilato –

+0

Perché dovrebbe essere? :) – clq

+0

dbms_output.put_line è "visibile" solo quando il metodo viene eseguito. La domanda è "avvertimenti del compilatore su qualsiasi codice PL/SQL che viene compilato". –

1

Questa non è una funzione supportata di Oracle e del linguaggio PL/SQL. Dovresti sviluppare una sorta di framework che controlli le variabili all'inizio dell'esecuzione per determinare se il codice è stato deprezzato, ma che tutto dovrebbe essere gestito manualmente dal team di sviluppo. Questa semplice funzione non è ancora inclusa da Oracle.

1

Abbiamo una soluzione personalizzata basata su PL/SQL Source Code Control inside the database – After Compile trigger for automatic archiving.

Whenever we compile – create or replace – a PL/SQL object, the CREATE DDL event is fired and we can intercept that event with our own trigger. At that point we have various pieces of information that we can use to insert a new record into the PLSQL_ARCHIVE table.

Il processo generale è la seguente

  • Il trigger raccoglie informazioni sull'oggetto compilato (parole chiave nei commenti). Una di queste parole chiave è deprecated nel metodo di intestazione (valore predefinito: false).
  • Quindi il trigger analizza i metodi utilizzati e verifica se è deprecato. Se il metodo è obsoleto, viene memorizzato nel nostro warning_table.
  • Per visualizzare l'avviso (la parte difficile) riscriviamo la vista USER_ERRORS che si fonde con il nostro warning_table.

Ora abbiamo un messaggio utile quando l'oggetto viene compilato:

OPLW-00001: The method SomeDeprecatedMethod is deprecated

Nota: Ci dispiace, non posso condividere il codice sorgente, perché è uno sviluppo interno.