19 mai 2018

Afficher l'ordre SQL d'une vue de façon récursive : DBMS_UTILITY.expand_sql_text

IntroductionUne vue est un objet tout simple d'Oracle, c'est juste un SELECT sur une ou plusieurs tables ou même sur d'autres vues. Mais un SELECT peut vite devenir très complexe et c'est justement pour masquer cette complexité qu'on crée des vues.Néanmoins, dans certains cas, nous voulons savoir quelle est la définition précise d'une vue, donc de façon récursive, c'est à dire afficher la définition des tables et vues sous-jacentes à cette vue et ce sur tous les niveaux. Prenons par exemple la vue V1 qui est un SELECT sur la table T1... [Lire la suite]
Posté par David DBA à 12:56 - - Permalien [#]
Tags :

08 mai 2018

CURSOR Expression : exécuter dans la clause SELECT un SELECT imbriqué avec N colonnes et M lignes

IntroductionIl est possible dans la partie SELECT d'un SELECT d'utiliser une sous-requête, qu'on appelle SELECT imbriqué, mais celle-ci doit obligatoirement retourner une seule valeur et une seule ligne. A noter que cette limitation n'existe pas pour les sous-requêtes dans les FROM et WHERE. Cette limite peut devenir très gênante, par exemple pour une relation entre deux tables trop complexe à écrire sous forme de jointure. Pour répondre à ce besoin, Oracle a inventé le CURSOR expression.   Points d'attentionNA.   ... [Lire la suite]
Posté par David DBA à 22:00 - - Permalien [#]
Tags :
29 avril 2018

Les plus vieux fichiers d'Oracle pour créer une base datent de 1987

IntroductionLa base de données Oracle est un logiciel existant depuis 1979, soit presque 40 ans!Celle-ci a incroyablement évolué depuis ses débuts, songez que sa première version ne supportait pas les transactions mais seulement les fonctionnalités SQL basiques de requête et jointure... pour info le COMMIT/ROLLBACK ne fut introduit que sur la V3.Depuis ces temps quasi-préhistoriques, de très (trop?) nombreuses fonctionnalités ont disparu, sont devenues Deprecated, Unsuported puis Obsoletes... Et donc, ma question est, existe t-il... [Lire la suite]
Posté par David DBA à 19:42 - - Permalien [#]
Tags :
08 avril 2018

Afficher les top N éléments des groupes d'une table ou d'une vue

IntroductionComment afficher les TOP N éléments de plusieurs groupes d'une table au lieu de tous les éléments de chaque groupe? L'objectif est d'avoir une idée du contenu des groupes d'une table ou d'une vue, nous utiliserons pour cela la fonction analytique ROW_NUMBER.   Points d'attentionNA.     Base de testsN'importe quelle base Oracle. Testé sur une 12.1.   ExemplesCe que je souhaite c'est par exemple afficher les trois premiers noms de tous les types d'objets gérés par Oracle, pour avoir une idée... [Lire la suite]
Posté par David DBA à 13:06 - - Permalien [#]
Tags :
04 avril 2018

Trouver la liste des commandes DML et DDL gérées par Oracle : vue V$SQLCOMMAND

     IntroductionLe dictionnaire de données d'Oracle renferme des milliers de vues; il est bien sur impossible de toutes les explorer mais certaines, au détour d'un livre ou d'un forum, m'ont bien plu. Par exemple V$SQLCOMMAND dont la définition est "displays the mapping between SQL opcodes and names" : en clair, c'est la liste de toutes les commandes Oracle qu'on peut exécuter :-)Vous les connaissez déjà toutes? Vous êtes sur? Y compris UPSERT? Y compris UNDROP OBJECT?   Points d'attentionNA.   ... [Lire la suite]
Posté par David DBA à 23:04 - - Permalien [#]
Tags : ,
29 mars 2018

Trouver des infos sur les tables du dictionnaire de données : exemple de DBA_TABLES et TAB$

IntroductionOn va voir aujourd'hui où trouver des informations sur les vues et tables du dictionnaire de données d'Oracle. Je prendrais comme exemple une vue fameuse, DBA_TABLES, et vous verrez que ces infos sont parfois bien cachées.   Points d'attentionNA.   Base de testsN'importe quelle base Oracle.     Exemples============================================================================================Trouver les infos basiques sur les vues du dictionnaire de... [Lire la suite]
Posté par David DBA à 20:37 - - Permalien [#]
Tags : ,

24 mars 2018

Oracle Internal Core : les scripts de création d'une base de données

IntroductionComment fait Oracle pour créer une base de données quand j'exécute un CREATE DATABASE, que ce soit en ligne de commandes ou via DBCA? La réponse est que des centaines de scripts sont appelés et ce sont eux qui créent cette base avec son dictionnaire de données. Ces scripts se trouvent dans $ORACLE_HOME/rdbms/admin et nous allons voir cela plus en détail. Points d'attentionAucun. Base de testsN'importe quelle base mais, dans mes tests, ma base est une 12.1. ... [Lire la suite]
Posté par David DBA à 22:02 - - Permalien [#]
Tags : ,
19 mars 2018

Oracle Internal Core : les types de données gérés par Oracle

IntroductionJe poursuis mon voyage au coeur d'Oracle pour comprendre un peu mieux comment celle-ci est construite. Cette fois, nous allons nous intéresser aux type de données gérés par Oracle, où trouver leur liste et comment ils sont définis. Points d'attentionAucun. Base de testsUne base 12c. Exemples============================================================================================Où trouver la liste des datatypes? ============================================================================================Le site... [Lire la suite]
Posté par David DBA à 19:27 - - Permalien [#]
Tags : ,
14 mars 2018

Oracle Internal Core : Les fonctions Oracle et le package PL/SQL STANDARD

IntroductionJe poursuis mon exploration des "entrailles" de la base Oracle (les américains parlent de "Oracle Internal" voir "Oracle Core Internal") pour comprendre un peu mieux comment elle fonctionne et surtout sur quels piliers elle repose. J'ai déjà fais des articles sur les structures mémoires X$xxx appelées Fixed Tables, les vraies tables du dictionnaire de données xxx$ (voir article "Trouver les objets Oracle cachés avec le dictionnaire de données"). Aujourd'hui je vais m'attaquer aux fonctions SQL telles qu'elles sont gérées... [Lire la suite]
Posté par David DBA à 21:01 - - Permalien [#]
Tags : ,
17 février 2018

Trace 10046 et base 12c CDB : ordres exécutés par Oracle lors d'un CREATE TABLE ?

IntroductionDans cet article "Quels sont les ordres exécutés par Oracle lors d'un CREATE TABLE ? Trace 10046 et base 12c non CDB", nous avons regardé quels ordres SQL Oracle exécutait lors d'un CREATE TABLE dans une base 12c non CDB. Maintenant, nous allons voir la même chose mais pour une base CDB. Je mettrais beaucoup moins de commentaires car ces ordres sont bien plus nombreux, certaines sont assez explicites (notamment quand Oracle donne le type des opérations) alors que d'autres restent totalement obscurs. Points... [Lire la suite]
Posté par David DBA à 22:36 - - Permalien [#]
Tags : ,