Posts tagged: Oracle

Oracle : index basé sur une fonction

By , 05/06/2013

Il est possible de définir des index basés sur des fonctions (based-function index). Par exemple lorsqu’il est nécessaire de faire un index sur ce genre de requête SQL :

SELECT * FROM
    MA_TABLE
WHERE
    SUBSTR(MA_COLONNE, 1, 3) = 'ABC';

Il est possible de définir un index spécialement sur la fonction recherchée de la façon suivante :

CREATE INDEX IDX ON MA_TABLE (SUBSTR(MA_COLONNE, 1, 3));

Oracle : Noms des objets sensibles à la casse

By , 11/01/2013

Par défaut Oracle enregistre tous les noms des objets en majuscule sauf s’ils ont été créés avec des guillemets. Dans ce cas le nom de l’objet est sensible à la casse. Par exemple :

SQL> create table "bob" (a number);

Table created.

SQL> select * from bob;
select * from bob
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from "bob";

no rows selected

Attention ! Certains logiciels SQL (SQLDevlopper par exemple) créent toutes leurs requêtes avec des guillemets lorsque l’on demande des actions (insertions, modifications, créations, etc.) sur les bases de données via les menus contextuels.

Sources :

Oracle : Supprimer toutes les tables d’un schéma

By , 14/12/2012

Voici un petit script PLSQL pour supprimer toutes les tables d’un schéma d’une base de données Oracle. Il s’agit de créer un curseur implicite sur la liste des tables de l’utilisateur sans prendre en compte les tables de la corbeille. Puis de boucler sur cette liste afin d’exécuter la commande de suppression de chaque table sans oublier toutes ses contraintes :

BEGIN
    FOR c IN (SELECT object_name,
                     object_type
              FROM user_objects
              WHERE object_type IN ('TABLE') AND object_name NOT LIKE '%$%') LOOP
        EXECUTE IMMEDIATE 'DROP '
                             || c.object_type || ' "'
                             || c.object_name || '" CASCADE CONSTRAINTS';
    END LOOP;
END;

Ce script peut être adapté pour supprimer d’autres types d’objet comme des vues. Pour cela, modifier TABLE en VIEW.

Oracle : Connaitre la taille d’une table en Mo

By , 07/09/2012

Pour connaître la taille utile d’une table d’une base de données oracle il faut se baser sur le nombre de blocs de la table et le multiplier par la taille d’un bloc. La taille utile est la taille exacte de la table. Cela ne prendre pas en compte les blocs vides occupés par la table qui proviendraient d’une fragmentation de la base de données.

    select
        user_tables.table_name,
        user_tablespaces.tablespace_name,
        user_tablespaces.block_size,
        user_tables.blocks,
        user_tablespaces.block_size * user_tables.blocks / 1024 / 1024
            as "Taille Mb"
    from user_tables, user_tablespaces
    where
        user_tables.tablespace_name = user_tablespaces.tablespace_name
    order by "Taille Mb" desc

Oracle : Générer une série de date

By , 15/02/2011

Comment est-il possible de générer une séquence de date à partir d’une simple requête SQL sur un base de données Oracle ?

Pour comprendre le principe, il faut savoir que ce type de résultat est obtenu en deux étapes. La première est la génération d’un nombre défini de données à partir d’une requête SQL. La seconde est la transformation des données générées pour obtenir des dates.

Génération d’une série de données

Il existe plusieurs façons de générer un nombre défini de données qui peuvent être exploitées par la suite. Voici un exemple simple :

SELECT 1
FROM DUAL
CONNECT BY LEVEL <= < n >

Avec n le nombre de données que vous souhaitez obtenir. Voici le résultat pour n = 3 :

1
———————-
1
1
1

Transformation de la série en séquence de dates

A partir des données générées précédemment, il est possible de créer une séquence de date avec ce type de requête SQL :

SELECT TRUNC(TO_DATE('20080415','yyyymmdd'),'MM')+ROWNUM -1 DATES FROM (
   SELECT 1
   FROM DUAL
   CONNECT BY LEVEL <= <n>
)

Voici le résultat pour n = 3 :

DATES
————————-
01/04/08
02/04/08
03/04/08

Sources : Pour plus d’explications, vous pouvez vous référer au site internet qui m’a servi de référence : http://www.dba-oracle.com/t_test_data_date_generation_sql.htm. Vous y retrouverez entre autre deux façons différentes de générer une série de données.

OfficeFolders theme by Themocracy