Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

Oracle

Choisissez la catégorie, puis la rubrique :

Sommaire > Développement
        Sortir à l'écran ou en table des chaînes de 1 à 32767 caractères
        Comment afficher le graph hiérarchique des contraintes d'intégrité référentielles liées à une table
        Comment afficher les évènements d'attente et les valeurs des variables liées
        Extraire le contenu d'une table ou générer les ordres d'insertion
        2.1. Niveau 1(29)
                Afficher le nombre de lignes de chaque table de l'utilisateur courant
                Liste de toutes les tables de la base
                Liste des tables non indexées de la base
                Liste des tables sur indexées de la base
                Liste des tables partitionnées de la base
                Désactiver les clés primaires de l'utilisateur connecté
                Activer toutes les clés primaires de l'utilisateur connecté
                Désactiver toutes les contraintes de clé étrangère de l'utilisateur connecté
                Activer toutes les contraintes de clé étrangère de l'utilisateur connecté
                Liste des tables advanced queues de la base
                Liste des clusters de la base
                Liste de tous les context de la base
                Liste de tous les DB LINK de la base
                Liste de toutes les dimensions de la base
                Liste des clés étrangères non indexées de la base
                Liste des clés étrangères de l'utilisateur connecté
                Liste de tous les index de la base
                Liste des colonnes indexées de la base
                Liste des index partitionnés de la base
                Liste des index similaires de la base
                Liste des job programmés
                Liste des librairies de la base
                Liste des opérateurs de la base
                Liste des Outlines de la base
                Liste des clés primaires de l'utilisateur connecté
                Liste des séquences de la base
                Liste des Snapshots de la base
                Liste des Snapshots logs de la base
                Liste des types objet de la base



Auteur : SheikYerbouti
Version : 26/02/2005
Page de l'auteur
Téléchargez le zip
Sortir à l'écran ou en table des chaînes de 1 à 32767 caractères
Voici une procédure qui permet d'afficher à l'écran ou d'inscrire en table des textes jusqu'à 32767 caractères

La procédure F_TRACE() permet ceci, sur l'écran via DBMS_OUTPUT ou dans une table Oracle (table : TRACE)

Cette procédure accepte 2 arguments :
F_TRACE ( PC$Message in VARCHAR2, PC$Output in VARCHAR2 DEFAULT 'E' )

PC$Message reçoit la chaîne de caractère
PC$Output reçoit le type de sortie : 'E' (défaut) = sortie écran, 'T' = sortie sur table

Pour la sortie sur table, cette dernière doit être préalablement créée avec le script fourni dans le fichier zip : create_table_trace.sql

Le script de création de la procédure est fourni dans le fichier zip : F_TRACE.FNC

Cette procédure sera particulièrement pratique pour tracer le code de vos applications


Auteur : SheikYerbouti
Version : 26/02/2005
Page de l'auteur
Téléchargez le zip
Comment afficher le graph hiérarchique des contraintes d'intégrité référentielles liées à une table
Souvent, lors de l'insertion ou de la suppression dans une table, l'on se demande quelles sont les contraintes d'intégrité référentielles (Foreign Keys) existantes entre les tables

Les scripts joints dans le fichier references.zip permettent d'afficher pour une table le graph des contraintes d'intégrité référentielles, et donc, de savoir quelles tables liées par des clés étrangères doivent être valorisées pour une insertion, et dans quel ordre supprimer les données lors d'une suppression

le script reference.sql accepte deux paramètres (nom de la table, nom du schéma) et peut être lancé depuis une icône du bureau avec la syntaxe suivante :
<Oracle_Home>\sqlplusw.exe user/pwd@base @reference.sql nom_table nom_schema
où depuis Sql*Plus avec la syntaxe suivante ;
@reference.sql nom_table nom_schéma

Pour les amateurs d'objets stockés dans la base, le script P_TRACE_FK rend le même service, sous forme de procédure stockée.
Cette procédure est appelée avec les syntaxes suivantes :
P_TRACE_FK( nom_table, nom_schéma );
ou
P_TRACE_FK( nom_table ) ; (le user connecté est pris par défaut)
avec l'utilisation de la procédure stockée, le tampon d'affichage doit être préalablement initialisé avec la commande : SET SERVEROUTPUT ON

Voici un exemple de sortie :

SQL*Plus: Release 9.2.0.1.0 - Production on Sa Oct 23 14:59:24 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connecté à : Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production -------------------------------------------------------------------- -- Contraintes d'intégrité référentielle de la Table : FD.LOV_LOV -- -------------------------------------------------------------------- LOV_LOV référencée par : 1 -> Item_Id.LOV_ITEM ___ LOV_ITEM référencée par : 1 -> Module.LOV_BLOCK ___ LOV_ITEM référencée par : 2 -> Bloc.LOV_BLOCK ______ LOV_BLOCK référencée par : 1 -> Mod_Nom_Module.LOV_MODULE -------------------------------------------------------------------------------- LOV_LOV référence : 1 -> Id.LOV_COLONNE (NO ACTION) LOV_LOV référence : 1 -> Id.LOV_ELEMENT_COLONNE (NO ACTION) Procédure PL/SQL terminée avec succès. SQL>
Où l'on voit clairement que pour supprimer une ligne dans la table LOV_MODULE il faut préalablement supprimer les fils de la table LOV_LOV puis ceux de la table LOV_ITEM puis ceux de la table LOV_BLOCK.
Et de la même façon, pour ajouter un enregistrement dans la table LOV_LOV, il faut qu'un parent existe dans la table LOV_ITEM, ayant elle-même un parent dans la table LOV_BLOCK elle-même fille de la table LOV_MODULE.


Auteur : Lalystar
Version : 26/02/2005
Page de l'auteur
Téléchargez le zip
Comment afficher les évènements d'attente et les valeurs des variables liées
Affichage des attentes et des valeurs des bind variables

Le script ci-joint permet à partir d'un fichier de trace d'obtenir les attentes au niveau de chaque requête et au niveau du fichier ainsi que d'afficher les valeurs des bind variables. Il est utile dans la mesure où les fichiers de trace sont directement exploitables. De plus, ces informations ne sont pas restituées par l'outil TkProf.

Les résultats sont affichés directement à l'écran.

Il faut pour voir ces informations générer un fichier de trace avec la commande suivante :

ALTER SESSION SET EVENTS '10046 trace name context forever, LEVEL 12';
Ensuite, vous pouvez exécuter les requêtes/procédures que vous souhaitez analyser.
pour arrêter la génération des traces, il faut exécuter :

ALTER SESSION SET EVENTS '10046 trace name context off';
Le script est écrit en PERL.
PERL est un langage très courant sous Unix. L'utilisateur peut télécharger gratuitement un interpréteur PERL ici : http://www.activestate.com/Products/ActivePerl.

Pour lancer ce script :

 
perl wait.pl <fichier de trace>
Exemples de sortie :

ela : est le temps écoulé (elapsed time) en centième de secondes.
cnt : est le nombre de fois où ce type d'attente s'est produit.

Affichage des attentes au niveau de chaque requête :

 
===================== 
CURSOR 23 
INSERT /*+ APPEND  */INTO DM_PERSONNALISE ( CLIENT_ID,C_CONTRIB,ISSUER_ID,NOTE_INTERNE ) 
SELECT A.CLIENT_ID,B.DM_C_CONTRIB,B.DM_ISSUER_ID,'N' 
FROM DM_CLIENT A,DM_ISSUER B,PPWEB.GRP_CLIENT@PUSHPULL C,PPWEB.GRP_ISSUER@PUSHPULL D 
WHERE A.CLIENT_ID = C.CLIENT_ID 
  AND C.GRP_ID = D.GRP_ID 
  AND D.C_CONTRIB = B.C_CONTRIB 
  AND D.ISSUER_ID = B.ISSUER_ID 

   WAIT : SQL*Net more data from dblink ela=2 cnt=681 
   WAIT : SQL*Net message to dblink ela=0 cnt=1341 
   WAIT : control file parallel write ela=0 cnt=2 
   WAIT : direct path write ela=0 cnt=1 
   WAIT : SQL*Net message from dblink ela=1324 cnt=1341 
   WAIT : control file sequential read ela=0 cnt=10
Affichage des attentes au niveau du fichier :

 
Total waits : 
   WAIT : SQL*Net message from dblink ela=40187 cnt=40917 
   WAIT : SQL*Net message to dblink ela=8 cnt=40917 
   WAIT : SQL*Net message from client ela=7 cnt=13 
   WAIT : pipe get ela=6 cnt=1 
   WAIT : rdbms ipc reply ela=5 cnt=13 
   WAIT : SQL*Net more data from dblink ela=4 cnt=685 
   WAIT : db file sequential read ela=3 cnt=37 
   WAIT : log file sync ela=3 cnt=9 
   WAIT : local write wait ela=3 cnt=18 
   WAIT : file open ela=2 cnt=6 
   WAIT : control file sequential read ela=1 cnt=36 
   WAIT : single-task message ela=1 cnt=2 
   WAIT : direct path write ela=0 cnt=3 
   WAIT : SQL*Net message to client ela=0 cnt=13 
   WAIT : db file scattered read ela=0 cnt=1 
   WAIT : control file parallel write ela=0 cnt=6
Affichage des valeurs des bind variables :

 
===================== 
CURSOR 25 
SELECT I.PROPERTY 
FROM SYS.OBJ$ IOB,SYS.USER$ U,SYS.IND$ I 
WHERE IOB.NAME = :b1 
  AND U.NAME = :b2 
  AND IOB.OBJ# = I.OBJ# 
  AND IOB.OWNER# = U.USER# 


   BIND : 1 value="PK_DM_GRP_CONTENT" 
   BIND : 2 value="DEXD"

Auteur : SheikYerbouti
Version : 26/02/2005
Page de l'auteur
Téléchargez le zip
Extraire le contenu d'une table ou générer les ordres d'insertion
Ce script contient la définition d'une procédure stockée (EXTRACTION_TABLE.PRC) qui permet d'extraire dans un répertoire (DIRECTORY) particulier et un fichier nommé soit :
  • Les lignes de la table avec le séparateur souhaité
  • Les ordres d'insertion correspondant à la sélection
Cette procédure permet d'indiquer les particularités suivantes :
  • le caractère de séparation des colonnes (par défaut la virgule)
  • le format des dates (par défaut 'DD/MM/YYYY')
  • une clause WHERE
  • une clause ORDER BY

Voici les paramètres qu'accepte la procédure

CREATE OR REPLACE PROCEDURE Extraction_Table ( PC$Table in Varchar2, -- Nom de la table a extraire PC$Fichier in Varchar2, -- Nom du fichier de sortie PC$Repertoire in Varchar2, -- Nom du directory de sortie PC$Separateur in Varchar2 Default ',', -- Caractere de separation PC$Entetes in Varchar2 Default 'O', -- Affichage de l'entete des colonnes PC$DateFMT in Varchar2 Default 'DD/MM/YYYY', -- Format des dates PC$Where in Varchar2 Default Null, -- Clause Where de filtrage PC$Order in Varchar2 Default Null -- Colonne de tri ) IS
PC$Table reçoit le nom de la table à extraire
PC$Fichier reçoit le nom du fichier d'extraction
PC$Repertoire reçoit le nom du répertoire d'extraction
PC$Separateur reçoit le caractère de séparation des colonnes (sans effet pour la génération des ordres d'insertion)
PC$Entetes peut prendre 3 valeurs :
  • 'O' demande l'extraction des lignes avec affichage de l'entête des colonnes
  • 'I' demande la génération des ordres d'insertion
  • <> 'O' et 'I' demande l'extraction des lignes sans entête de colonnes
PC$DateFMT reçoit le format d'extraction des dates
PC$Where reçoit une éventuelle clause de filtrage
PC$Ordre reçoit une éventuelle clause de tri

Quelques exemples d'utilisation :

Extraire dans un fichier les lignes de la table EMP avec entête de colonne, séparées par un point-virgule

Extraction_table ( PC$Table => 'EMP' , PC$Repertoire => 'FIC_OUT' , PC$Separateur => ';' ) ;
Générer les ordres d'insertion pour la table EMP avec format des dates 'DD/MM/YYYY HH24:MI:SS' dont le job est 'CLERK'

Extraction_Table ( PC$Table => 'EMP' , PC$Repertoire => 'FIC_OUT' , PC$Entetes => 'I' , PC$DateFMT => 'DD/MM/YYYY HH24:MI:SS' , PC$Where => 'JOB = ''CLERK''' ) ;
Si vous souhaitez également n'extraire que certaines colonnes de la table, la procédure est aisément modifiable, en lui passant en paramètre supplémentaire, une collection contenant les colonnes à extraire.

Le fichier extraction_table.zip contient deux procédures :
  • extraction_table_8i.prc pour une base 8i
  • extraction_table_9i.prc pour une base 9i



Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique Oracle

Partenaire : Hébergement Web