Una tabella di configurazione è un modo razionale per organizzare i parametri di un ambiente PL/SQL. In essa possiamo memorizzare le informazioni che possono variare il comportamento di un package, una procedura, una funzione o altro.
Segue un semplice esempio di tabella con relativo indice (si tratta di un indice funzionale, per rendere il parametro case-unsensitive):
| CREATE TABLE CONFIGURAZIONE |
| ( |
| PARAMETRO VARCHAR2(255 BYTE), |
| VALORE VARCHAR2(255 BYTE), |
| NOTE VARCHAR2(1000 BYTE) |
| ); |
| CREATE UNIQUE INDEX IDX_CHIAVE ON PARAMETRI(UPPER(PARAMETRO)); |
Le relative funzioni per leggere/scrivere i parametri sono:
| CREATE OR REPLACE FUNCTION Get_Parameter( | |
| i_key VARCHAR2, | |
| i_default VARCHAR2 DEFAULT NULL | |
| ) | |
| RETURN VARCHAR2 | |
| IS | |
| o_value CONFIGURAZIONE.VALORE%TYPE; | |
| BEGIN | |
| -- Se il parametro non esiste o è nullo allora ritorna | |
| -- il valore di default specificato. | |
| SELECT NVL(VALORE, i_default) | |
| INTO o_value | |
| FROM CONFIGURAZIONE | |
| WHERE UPPER(PARAMETRO) = UPPER(i_key); | |
| RETURN o_value; | |
| EXCEPTION | |
| WHEN NO_DATA_FOUND THEN | |
| RETURN i_default; | |
| END; | |
| CREATE OR REPLACE PROCEDURE Set_Parameter( | |
| i_key VARCHAR2, | |
| i_value VARCHAR2 | |
| ) | |
| IS | |
| PRAGMA AUTONOMOUS_TRANSACTION; | |
| v_found PARAMETRI.VALORE%TYPE; | |
| BEGIN | |
| -- Test di esistenza | |
| SELECT VALORE | |
| INTO v_found | |
| FROM CONFIGURAZIONE | |
| WHERE UPPER(PARAMETRO) = UPPER(i_key); | |
| -- Aggiornamento | |
| UPDATE CONFIGURAZIONE SET VALORE = i_value WHERE UPPER(PARAMETRO) = UPPER(i_key); | |
| COMMIT; | |
| EXCEPTION | |
| WHEN NO_DATA_FOUND THEN | |
| RAISE; | |
| WHEN OTHERS THEN | |
| ROLLBACK; | |
| RAISE; | |
| END; | |