Export des procédures/fonctions/package d’une instance Oracle

Après avoir galéré plusieurs heures afin de pouvoir exporter facilement chaque procédure / package / fonction d’une instance Oracle dans un fichier il me semblait nécessaire de créer un post sur le sujet.

Première chose à savoir : où se trouve le contenu de ces objets ?
2 réponse à cette question :

  • dans la table USER_SOURCE pour le schéma courant
  • dans la table DBA_SOURCE pour le schéma SYSTEM afin d’avoir un listing exhaustif de tous les objets

Lire la suite

Activation/désactivation d’indexe

Avant quand je voulais désactivé un indexe, je le supprimai car il me semblait que s’était impossible de le désactiver (comme une contrainte avec l’option DISABLE).

Et puis finalement il y avait bien une option pour ne pas avoir à supprimer un indexe juste pour le désactiver.
Lire la suite

Compter les lignes des tables d’un schéma en PL/SQL

Pour compter le nombre de lignes de toutes les tables d’un schéma Oracle il est nécessaire d’utiliser le bloc anonyme suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
    nbLignes NUMBER := 0;
BEGIN
 
    FOR C1 IN (
        select TABLE_NAME
        from user_tables
    ) LOOP
     
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || C1.TABLE_NAME INTO nbLignes;
     
    DBMS_OUTPUT.PUT_LINE(C1.TABLE_NAME || ': ' || nbLignes);
             
    END LOOP;
END;

Il est bien évidement possible de filtrer les tables en ajoutant une instruction WHERE dans la requête du curseur C1

Modification d’une séquence Oracle en PL/SQL

Pour modifier une séquence existante il est nécessaire de la supprimer puis de la recréer. Pour effectuer cela facilement, il est possible de tester son existence dans un bloc PL/SQL anonyme et en fonction de son existence de la supprimer puis la créer :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE
    existe NUMBER(1) := 0;
    seqName VARCHAR2(30) := 'MA_SEQUENCE';

BEGIN
 
    select COUNT(*) INTO existe
    from user_sequences
    WHERE SEQUENCE_NAME = seqName;
     
    IF existe = 1 THEN
     
        EXECUTE IMMEDIATE 'DROP SEQUENCE ' || seqName;
     
    END IF;
     
    EXECUTE IMMEDIATE 'create sequence ' || seqName || ' increment by 1 start with 1 minvalue -2 nocycle noorder nocache';
             
END;