Conditionnement de Procedures, Fonctions, Packages, Triggers, etc. selon un environnement en PL/SQL (Oracle)
0Très utile pour distinguer et conditionner les blocs PL/SQL spécifiques selon les environnements dans le cadre de réplications et plus spécifiquement lors de sauvegardes par exemple :
select sys_context('USERENV','DB_NAME') as instance from dual;
Vous pourrez ainsi générer des conditions d’exception selon vos environnements.
Explorez donc les possibilités de la fonction sys_context() vous trouverez sans doute rapidement une grande utilité à identifier certains paramètres du client ou de l’hôte pour le conditionnement d’exécution de packages, triggers etc.
--nom de la base de données SELECT sys_context('USERENV','DB_NAME') as nom_bdd from dual; --adresse ip du client SELECT sys_context('USERENV', 'IP_ADDRESS') as adresse_ip FROM dual; --nom de la machine SELECT sys_context('USERENV', 'HOST' ) as hote FROM dual; --schema actuel SELECT sys_context('USERENV', 'CURRENT_SCHEMA') as curr_schema FROM DUAL; --domaine de la base de données SELECT sys_context('USERENV', 'DB_DOMAIN') as db_domain FROM DUAL; --user du serveur SELECT sys_context('USERENV', 'SERVER_HOST') as srv_hote FROM DUAL;
Voici un cas concret d’utilisation dans un bloc PL/SQL, pour identifier vôtre environnement :
DECLARE --Variable de travail v_server_host varchar2(30) := ''; BEGIN --Identification de l'environnement SELECT sys_context('USERENV', 'SERVER_HOST') INTO v_server_host FROM DUAL; --Conditionnement IF ( v_server_host = 'environnement') THEN --Si c'est vrai DBMS_OUTPUT.put_line ( 'Vous êtes sur ' || v_server_host ); ELSE --Alternative DBMS_OUTPUT.put_line ( 'Vous n''êtes pas sur ' || v_server_host ); END IF; --Gestion d'exception EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN NULL; END;
Pour aller plus loin :
Share