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

Ajouter une année à une date

Pour ajouter une année à une date on aurait tendance à faire :

1
select sysdate + 365 AS ANNEE_SUP from dual;

Ou :

1
select ADD_MONTHS(sysdate, 12) AS ANNEE_SUP from dual;

Mais en fin de compte la bonne syntaxe est :

1
select sysdate + interval '1' year AS ANNEE_SUP  from dual;

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

Création et alimentation d’une dimension DATE

Lors de la création d’un entrepôt de données, bien souvent, il contient une dimension DATE contenant la liste des dates depuis l’année 1900 jusqu’à l’année 2999. Cette table contenant plusieurs attributs comme par exemple :

  • La date au format date
  • La date au format chaine de caractère sous la forme DD/MM/YYYY
  • La date au format numérique sous la forme YYYYMMDD
  • Le jour de l’année

Voici donc un exemple de création de DIM_DATE en Oracle.
Lire la suite

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;