Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Blog d'un DBA sur le SGBD Oracle et SQL
13 mars 2021

SQLcl : obtenir des informations sur les objets - SQLcl: get information about objects

 

Introduction
SQLcl (SQL Command Line) est un utilitaire Java intégré dans Oracle depuis la 12.2, alors qu'auparavant il fallait l'installer à part. Il est basé sur l'outil gérant les scripts SQL de SQL Developer et, par rapport à SQL*Plus, il intègre de nouvelles commandes.

Aujourd'hui nous voyons celles permettant d'afficher les informations sur les objet et vous allez voir que sur ce point, SQLcl enfonce SQL*Plus.


Autres articles sur SQLcl : http://dbaoraclesql.canalblog.com/archives/sqlcl/index.html

 



Points d'attention
N/A.

 



Base de tests
Une base Oracle 19c multi-tenants.




Exemples
============================================================================================
Les commandes SQL*Plus pour afficher les infos d'une table
============================================================================================
 
On crée une table de test T1 sous SQL*Plus, pas sous SQLcl, avec les contraintes d'intégrité PK, Unique, Check, Not Null, un index sur une colonne et avec 100 000 lignes.
     SQL> CREATE TABLE ZZ1 (
          id number(8,0),
          name varchar2(50) NOT NULL,
          first_name varchar2(50) NOT NULL,
          ID_EXT number(8) NOT NULL,
          CONSTRAINT ZZ1_PK_ID PRIMARY KEY(id),
          CONSTRAINT ZZ1_CK_UPPER_NAME CHECK (NAME=UPPER(name)),
          CONSTRAINT ZZ1_UNI_ID_EXT UNIQUE(ID_EXT)
          );

     SQL> BEGIN
               FOR i in 1..100000
               LOOP
                    INSERT INTO ZZ1 values (i, 'JONES', 'Tom', i*10);
               END LOOP;
          END;
          /
     PL/SQL procedure successfully completed.

     SQL> commit;
     Commit complete.

Création d'un index sur la colonne first_name puis génération des stats sur la table et sur l'index.

     SQL> CREATE INDEX IDX_ZZ1_FIRST_NAME on ZZ1(first_name);
     Index created.

     SQL> exec dbms_stats.gather_table_stats('HR', 'ZZ1');
     PL/SQL procedure successfully completed.

     
SQL> exec dbms_stats.gather_index_stats('HR', 'IDX_ZZ1_FIRST_NAME');

     PL/SQL procedure successfully completed.


Alors, quelles sont les informations disponibles sur cette table avec les commandes SQL*Plus, sans, bien sur, interroger directement les vues DBA_TABLES, DBA_INDEXES...


Sous SQL*PLUS, pour afficher les infos des objets il y a :

          - desc
          - DBMS_METADATA.GET_DDL

SQL*Plus DESC
Le DESC de SQL*Plus ne donne des informations que sur un nombre restreint d'objets : table, vue, synonyme, fonction, procédure. Le résultat du DESC est assez pauvre pour une table : il manque les contraintes d'intégrité autres que NOT NULL, il manque les index, si pour les colonnes VARCHAR2 la longueur est en BYTE ou CHAR etc etc

     SQL> help desc
     DESCRIBE
     --------
     Lists the column definitions for a table, view, or synonym, or the specifications for a function or procedure.
     DESC[RIBE] {[schema.]object[@connect_identifier]}

     SQL> desc ZZ1

     Name         Null?      Type
     --------------------------------------------------
     ID           NOT NULL   NUMBER(8)
     NAME         NOT NULL   VARCHAR2(50)
     FIRST_NAME   NOT NULL   VARCHAR2(50)
     ID_EXT       NOT NULL   NUMBER(8)


SQL*PLUS DBMS_METADATA.GET_DDL
La fonction dbms_metadata.get_ddl nous donne la définition d'un objet, sans la restriction des types d'objets du DESC. 
On notera que les informations sont plus détaillées que pour le DESC mais moins lisibles car polluées par d'innombrables paramètres techniques. Néanmoins, nous avons ici toutes les contraintes d'intégrité ainsi que les index associés aux contraintes PK et Unique. A noter qu'il manque l'index créé sur la colonne FIRST_NAME.
     SQL> select dbms_metadata.get_ddl('TABLE', 'ZZ1', 'HR') from dual;
     DBMS_METADATA.GET_DDL('TABLE','ZZ1','HR')
     --------------------------------------------------------------------------------
     CREATE TABLE "HR"."ZZ1"
     ( "ID" NUMBER(8,0),
     "NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "FIRST_NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "ID_EXT" NUMBER(8,0) NOT NULL ENABLE,
     CONSTRAINT "ZZ1_CK_UPPER_NAME" CHECK (NAME=UPPER(name)) ENABLE,
     CONSTRAINT "ZZ1_PK_ID" PRIMARY KEY ("ID")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE,
     CONSTRAINT "ZZ1_UNI_ID_EXT" UNIQUE ("ID_EXT")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE
     ) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION IMMEDIATE
     PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS"


============================================================================================
Les commandes SQLcl pour afficher les infos d'une table
============================================================================================
 

ATTENTION : la commande pour lancer SQLcl s'appelle sqlui et non pas sqlcl... pourquoi faire simple quand on peut faire compliqué?
Son chemin est : /home/oracle/bin/sqlui
     [oracle@localhost ~]$ . oraenv
     ORACLE_SID = [orclcdb] ?
     The Oracle base remains unchanged with value /u01/app/oracle

     [oracle@localhost ~]$ sqlcl

     bash: sqlcl: command not found...

     [oracle@localhost ~]$ sqlui

     SQLcl: Release 19.1 Production on Sat Mar 13 06:25:51 2021
     Copyright (c) 1982, 2021, Oracle. All rights reserved.
     Username? (''?) HR
     Password? (**********?) **
     Last Successful login time: Sat Mar 13 2021 06:25:57 -05:00
     Connected to:
     Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
     Version 19.3.0.0.0

Sous SQLCl, les commandes pour afficher les infos des objets disponibles sont :

          - desc
          - info
          - info+
          - ddl          
          - DBMS_METADATA.GET_DDL

SQLcl DESC
Le DESC de SQLcl est comparable à celui de SQL*Plus.

     SQL> help describe
     DESCRIBE
     --------
     Lists the column definitions for a table, view, or synonym, or the specifications for a function or procedure.
     DESC[RIBE] {[schema.]object[@connect_identifier]}
     
     SQL> desc ZZ1

     Name        Null?       Type
     -----------------------------------------
     ID          NOT NULL    NUMBER(8)
     NAME        NOT NULL    VARCHAR2(50)
     FIRST_NAME  NOT NULL    VARCHAR2(50)
     ID_EXT      NOT NULL    NUMBER(8)


SQLcl INFORMATION
Mais SQLCl a une commande en plus, INFORMATION, qui donne des infos très intéressantes et se définit comme mieux que DESCRIBE.

     SQL> help information
     INFORMATION
     --------
     This command is like describe but with more details about the objects requested.
     INFO[RMATION] {[schema.]object[@connect_identifier]}
     INFO+ will show column statistics

INFORMATION nous indique :

Pour la table
          - la dernière fois que la table a été analysée pour générer les stats
          
- le nombre de lignes
          - le nombre de lignes pour l'échantillonnage 
          - si elle est créée avec l'option INMEMORY
          - quel est le commentaire associé à l'objet

Pour les colonnes (pas de ligne qui souligne les colonnes, c'est bizarre):
          - quelle est la colonne Primary Key, avec un astérisque devant celle-ci
          - le nom
          - le type
          - si NULL est permis ou non
          la valeur par défaut
          le commentaire associé


Pour les indexes

          - le nom
          - si l'index est unique ou non
          - son statut
          - s'il est basé sur une fonction
          - et, bien sur, quelle est la colonne indexée

     SQL> info zz1

     TABLE: ZZ1
     LAST ANALYZED:2021-03-11 10:16:11.0
     ROWS :100000
     SAMPLE SIZE :100000
     INMEMORY :DISABLED
     COMMENTS :

     Columns

     NAME        DATA TYPE           NULL DEFAULT COMMENTS
     *ID         NUMBER(8,0)         No
     NAME        VARCHAR2(50 BYTE)   No
     FIRST_NAME  VARCHAR2(50 BYTE)   No
     ID_EXT      NUMBER(8,0)         No

     Indexes

     INDEX_NAME                UNIQUENESS   STATUS     FUNCIDX_STATUS   COLUMNS
     ________________________ _____________ _________ _________________ _____________
     HR.ZZ1_PK_ID              UNIQUE       VALID                       ID
     HR.ZZ1_UNI_ID_EXT         UNIQUE       VALID                       ID_EXT
     HR.IDX_ZZ1_FIRST_NAME     NONUNIQUE    VALID                       FIRST_NAME


SQLcl INFO+
La commande INFO a un petit frère : INFO+ qui montre, comme le dit l'aide, les stats sur les colonnes.

Par rapport à INFO, nous obtenons en plus les données suivantes pour chaque colonne mais nous avons perdu la colonne COMMENTS; dommage.
          LOW_VALUE
          HIGH_VALUE
          NUM_DISTINCT
          HISTOGRAM 

     SQL> info+ zz1
     TABLE: ZZ1
     LAST ANALYZED:2021-03-11 10:16:11.0
     ROWS :100000
     SAMPLE SIZE :100000
     INMEMORY :DISABLED
     COMMENTS :

     Columns

     NAME        DATA TYPE         NULL  DEFAULT LOW_VALUE  HIGH_VALUE  NUM_DISTINCT  HISTOGRAM
     *ID         NUMBER(8,0)       No            1          100000      100000        NONE
     NAME        VARCHAR2(50 BYTE) No            JONES      JONES       1             NONE
     FIRST_NAME  VARCHAR2(50 BYTE) No            Tom        Tom         1             NONE
     ID_EXT      NUMBER(8,0)       No            10         1000000     100000        NONE

     Indexes

     INDEX_NAME                  UNIQUENESS   STATUS   FUNCIDX_STATUS   COLUMNS
     ________________________ _____________ _________ _________________ _____________
     HR.ZZ1_PK_ID                UNIQUE       VALID                     ID
     HR.ZZ1_UNI_ID_EXT           UNIQUE       VALID                     ID_EXT
     HR.IDX_ZZ1_FIRST_NAME       NONUNIQUE    VALID                     FIRST_NAME


SQLcl DBMS_METADATA.GET_DDL
Le résultat de dbms_metadata.get_ddl est identique, sous SQLCl à celui de SQL*Plus.

     SQL> select dbms_metadata.get_ddl('TABLE', 'ZZ1', 'HR') from dual;
     DBMS_METADATA.GET_DDL('TABLE','ZZ1','HR')
     --------------------------------------------------------------------------------
     CREATE TABLE "HR"."ZZ1"
     ( "ID" NUMBER(8,0),
     "NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "FIRST_NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "ID_EXT" NUMBER(8,0) NOT NULL ENABLE,
     CONSTRAINT "ZZ1_CK_UPPER_NAME" CHECK (NAME=UPPER(name)) ENABLE,
     CONSTRAINT "ZZ1_PK_ID" PRIMARY KEY ("ID")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE,
     CONSTRAINT "ZZ1_UNI_ID_EXT" UNIQUE ("ID_EXT")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE
     ) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION IMMEDIATE
     PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS"


SQLcl DDL
La commande DDL est nouvelle aussi sous SQLCl même si elle appelle en sous-main dbms_metadata.get_ddl. 
La première partie du résultat est identique à dbms_metadata.get_ddl ci-dessus mais, en plus, nous avons la définition de l'index créé à la main sur la colonne FIRST_NAME. Avec dbms_metadata.get_ddl on a les définitions des index associés aux contraintes d'intégrité PRIMARY KEY et UNIQUE mais pas aux index créés avec la fonction CREATE INDEX. La commande DDL est donc plus puissante.
     SQL> help ddl
     DDL
     ---
     DDL generates the code to reconstruct the object listed. Use the type option for materialized views. Use the save options to save the      DDL to a file.
     DDL [<object_name> [<type>] [SAVE <filename>]]

     SQL> ddl zz1

     CREATE TABLE "HR"."ZZ1"
     ( "ID" NUMBER(8,0),
     "NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "FIRST_NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP" NOT NULL ENABLE,
     "ID_EXT" NUMBER(8,0) NOT NULL ENABLE,
     CONSTRAINT "ZZ1_CK_UPPER_NAME" CHECK (NAME=UPPER(name)) ENABLE,
     CONSTRAINT "ZZ1_PK_ID" PRIMARY KEY ("ID")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE,
     CONSTRAINT "ZZ1_UNI_ID_EXT" UNIQUE ("ID_EXT")
     USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ENABLE
     ) DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION IMMEDIATE
     PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ;

     CREATE INDEX "HR"."IDX_ZZ1_FIRST_NAME" ON "HR"."ZZ1" ("FIRST_NAME")

     PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ;

Le résultat est difficilement lisible. Sous SQLCl, il y a une commande FORMAT qui peut nous sortir de l'embarras en formatant le résultat stocké dans le buffer mémoire.

     SQL> format buffer
     1 CREATE TABLE "HR"."ZZ1" (
     2      "ID" NUMBER(8, 0),
     3           "NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP"
     4                NOT NULL ENABLE,
     5           "FIRST_NAME" VARCHAR2(50) COLLATE "USING_NLS_COMP"
     6                NOT NULL ENABLE,
     7      "ID_EXT" NUMBER(8, 0)
     8           NOT NULL ENABLE,
     9      CONSTRAINT "ZZ1_CK_UPPER_NAME" CHECK ( name = upper(name) ) ENABLE,
     10      CONSTRAINT "ZZ1_PK_ID" PRIMARY KEY ( "ID" )
     11           USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     12                STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
     13                DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
     14           TABLESPACE "USERS"
     15      ENABLE,
     16      CONSTRAINT "ZZ1_UNI_ID_EXT" UNIQUE ( "ID_EXT" )
     17           USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     18                STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
     19                DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
     20           TABLESPACE "USERS"
     21      ENABLE
     22 ) DEFAULT COLLATION "USING_NLS_COMP"
     23 SEGMENT CREATION IMMEDIATE
     24 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
     25      STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
     26      DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
     27 TABLESPACE "USERS";
     28
     29 CREATE INDEX "HR"."IDX_ZZ1_FIRST_NAME" ON
     30      "HR"."ZZ1" (
     31           "FIRST_NAME"
     32      )
     33           PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     34                STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
     35                DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT )
     36*           TABLESPACE "USERS";


============================================================================================
Les commandes SQLcl d'information sur des objets autres qu'une table
============================================================================================

Et avec un index, nous avons quelles infos? Visiblement c'est un appel à dbms_metadata.get_ddl qui est fait.

     SQL> info HR.IDX_ZZ1_FIRST_NAME
     CREATE INDEX "HR"."IDX_ZZ1_FIRST_NAME" ON "HR"."ZZ1" ("FIRST_NAME")
     PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ;

     SQL> info+ HR.IDX_ZZ1_FIRST_NAME

     CREATE INDEX "HR"."IDX_ZZ1_FIRST_NAME" ON "HR"."ZZ1" ("FIRST_NAME")
     PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
     STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
     PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
     BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
     TABLESPACE "USERS" ;

Et avec un user?

Création sous SQL*Plus du user U1 avec un rôle, un droit objet, un droit système.
     [oracle@localhost ~]$ sqlplus SYS@orcl as sysdba
     SQL> CREATE USER U1 IDENTIFIED BY U1;
     User created.
     SQL> GRANT CONNECT, DBA TO U1;
     Grant succeeded.
     SQL> GRANT SELECT ON HR.REGIONS to U1;
     Grant succeeded.

Sous SQL*Plus, erreur car desc ne gère pas les users.

     SQL> desc U1;
     ERROR:
     ORA-04043: object U1 does not exist

La fonction dbms_metadata.get_ddl ne nous donne pas les droits et rôles du user.
     SQL> select dbms_metadata.get_ddl('USER', 'U1') from dual;

     DBMS_METADATA.GET_DDL('USER','U1')
     --------------------------------------------------------------------------------
     CREATE USER "U1" IDENTIFIED BY VALUES 'S:12E1824297E747866AD6C620E77B5C651AEB
     DE50D17793099FB9F22F6320;T:394AD41E8E2E99CD78E3AC4034C343806B951EDF31B7EB3E17CDA
     68DBA63579C32256B2B0DD2AE215655BD0F846DA84CC9083119F27397960EC90AD774AD56E850B63
     43B8D6097487FB2EEE1F9A32D2F' DEFAULT COLLATION "USING_NLS_COMP"
     DEFAULT TABLESPACE "USERS"
     TEMPORARY TABLESPACE "TEMP"

Idem sous SQLcl, les users ne sont pas gérés; dommage car afficher en une seule commande le code DDL d'un user, la liste de ses droits et ses rôles, cela eut été classe.

     SQL> desc U1;
     ERROR:
     ORA-04043: object U1 does not exist
     SQL> info U1
     Object Not Found: U1
     SQL> info u1
     Object Not Found: u1
     SQL> info+ U1;
     Object Not Found: U1
     SQL> ddl U1;
     Object U1 not found

     SQL> select dbms_metadata.get_ddl('USER', 'U1') from dual;

     DBMS_METADATA.GET_DDL('USER','U1')
     --------------------------------------------------------------------------------
     CREATE USER "U1" IDENTIFIED BY VALUES 'S:12E1824297E747866AD6C620E77B5C651AEB
     DE50D17793099FB9F22F6320;T:394AD41E8E2E99CD78E3AC4034C343806B951EDF31B7EB3E17CDA
     68DBA63579C32256B2B0DD2AE215655BD0F846DA84CC9083119F27397960EC90AD774AD56E850B63
     43B8D6097487FB2EEE1F9A32D2F' DEFAULT COLLATION "USING_NLS_COMP"
     DEFAULT TABLESPACE "USERS"
     TEMPORARY TABLESPACE "TEMP";


 


 


Conclusion
En conclusion, on voit bien que les commandes SQLcl pour afficher des infos sur une table sont plus puissantes que le DESC de SQL*Plus; les commandes INFO+ et DDL à elles seules méritent qu'on utilise cet utilitaire.

 

Publicité
Publicité
Commentaires
Blog d'un DBA sur le SGBD Oracle et SQL
Publicité
Archives
Blog d'un DBA sur le SGBD Oracle et SQL
  • Blog d'un administrateur de bases de données Oracle sur le SGBD Oracle et sur les langages SQL et PL/SQL. Mon objectif est de vous faire découvrir des subtilités de ce logiciel, des astuces, voir même des surprises :-)
  • Accueil du blog
  • Créer un blog avec CanalBlog
Visiteurs
Depuis la création 340 848
Publicité