| |||||
auteur : SheikYerbouti | |||||
Explication de la seconde requête : Chaque ligne retournée par une requête se voit attribuer un numéro, commençant par 1. Cela est parfait tant que les données ne sont pas triées avec le mot-clé ORDER BY ! Par contre, si vous souhaitez trier les données, le numéro (ROWNUM) est attribué pour chaque ligne AVANT le tri final ! Prenons un exemple en affichant le contenu de la table EMP trié par salaires :
Nous ne voulons maintenant afficher que les 4 premières lignes :
les CLERK ont disparu ! Simplement parce que le tri a été effectué après que le ROWNUM ait été affecté aux lignes retournées par la requête. Il faut donc trier les données avant qu'Oracle ne leur affecte un numéro ! Ceci est réalisé par un tri inclus dans une sous-requête :
Voici enfin le résultat attendu.
|
| |||
auteur : Fred_D | |||
Voici une méthode pour filtrer la liste des enregistrements sur des intervalles consécutifs :
|
| ||
auteur : lalystar | ||
Supposons qu'on ait une table PERSONNE (nom, prenom, telephone) et qu'on souhaite avoir la liste des personnes
ayant le même nom et le même prénom. On peut l'obtenir avec la requête suivante :
Si on ne veut garder qu'une seule ligne pour chaque ensemble de personnes ayant le même nom et le même prénom, le choix se faisant
de manière arbitraire, on peut utiliser la requête suivante :
Remarque : - cette requête doit être adaptée si l'une des colonnes nom ou prénom peut être nulle. - cette requête garde la ligne de rowid minimum parmi l'ensemble des lignes ayant même nom et même prénom. | ||
lien : Comment sélectionner du m-iéme au n-iéme enregistrements ? |
| |||||
auteur : Jaouad | |||||
À l'aide de la table des exceptions : elle peut se créer via ce script :
Ou en utilisant le script fournit dans $ORACLE_HOME/RDBMS/admin/UTLEXCPT.SQL. Voyons son utilisation au travers de ce jeu d'essais :
Essayons maintenant de créer une contrainte d'unicité : nous allons obtenir une erreur :
La requête suivante nous permet d'identifier les lignes posant problème :
|
| ||||
auteur : SheikYerbouti | ||||
Cette fonction permet d'effectuer plusieurs remplacements d'un coup (à l'inverse de REPLACE()
qui ne permet le remplacement que d'un caractère ou une chaîne à la fois) : TRANSLATE( chaîne en entrée, chaîne de recherche, chaîne de substitution ) ;
Le premier argument de la fonction est la chaîne en entrée, Le deuxième indique la chaîne de recherche, Le troisième indique la substitution caractère par caractère, En clair, le premier caractère de la chaîne de recherche trouvé dans la chaîne en entrée sera remplacé par le premier caractère de la chaîne de substitution et ainsi de suite pour les autres caractères. La ruse dans l'exemple est le premier caractère '1' dans les deux derniers arguments. On dit qu'il s'agit d'un caractère leurre, pusiqu'il sert à ignorer tous les caractères de la chaîne en entrée qui ne sont pas dans la chaîne de recherche. La fonction remplace tous les '1' par '1' et tous les autres caractères de la chaîne de recherche trouvés dans la chaîne en entrée par rien !
La fonction remplace tous les '1' par '1' et tous les autres caractères de la chaîne de recherche par le caractère '_'.
La fonction remplace toutes les minuscules accentuées par leurs équivalents non accentués. Bien évidement, les arguments de la fonction peuvent être des variables :
|
| |||
auteur : SheikYerbouti | |||
TRUNC( valeur, précision ) ; Cette fonction permet d'effectuer deux types d'action (sur un numérique) :
|
| ||
auteur : SheikYerbouti | ||
La fonction TRUNC() appliquée à une date ne permet pas seulement l'ablation de la partie horaire. Nous connaissons tous cette fonction qui, sans spécification de son deuxième argument, retire la partie horaire. Mais nous connaissons souvent moins l'autre particularité de cette fonction appliquée aux dates, par l'intermédiaire du second argument (format). TRUNC( date [,'format'] )
|
| ||
auteur : Helyos | ||
Il existe beaucoup de formats de date disponibles avec Oracle. Voici une liste non exhaustive des différents formats de date disponible.
|
| ||
auteur : Pomalaix | ||
Les contraintes CHECK sont pratiques pour mettre en place un simple contrôle statique de validité des données, mais elles sont très limitées.
Il faudra alors recourir à des déclencheurs pour des validations plus complexes. Une contrainte CHECK ne peut faire référence qu'aux colonnes de la ligne courante. Elle ne peut donc pas impliquer d'autres lignes de la table, ni impliquer d'autres tables. En particulier, on ne peut pas y utiliser un SELECT. Dans une contrainte CHECK, on ne peut pas faire appel à une fonction personnalisée. Les fonctions standard (comme LENGTH ou UPPER par exemple) sont autorisées, à condition qu'elles soient déterministes. C'est pourquoi on ne peut pas utiliser les fonctions SYSDATE ou USER, qui provoquent l'une comme l'autre l'erreur "ORA-02436: variable de date ou système mal indiquée dans contrainte CHECK". Pour résumer, une contrainte CHECK ne peut mettre en jeu que les colonnes de la ligne courante, des constantes éventuellement sous forme de listes, et des fonctions standard déterministes. Exemples :
|
| |||
auteur : Jaouad | |||
Il existe essentiellement une différence de place entre ces types de données .
En effet, VARCHAR2 a une longueur variable qui dépend directement de la taille de la donnée inséree alors que CHAR à une longueur fixe (défini à la création de la table ). Prenons l'exemple d'un VARCHAR2 (20)) et CHAR(20), si on insère 'Oracle' dans les deux colonnes, Oracle serat compléte par des espaces dans la colonne CHAR(20) :
La Longueur maximale de Char (2000) et Varchar2 (4000) sur une 8i :
Oracle recommande quand même l'utilisation de VARCHAR2 au lieu de CHAR pour une raison de compatibilité dans les versions supérieures. Outre l'utilisation supplémentaire de place, l'utilisation de CHAR en lieu et place de VARCHAR2 augmentera également la taille de vos index et peut parfois diminuer les performances de recherches de ces derniers ! |
| ||
auteur : Jaouad | ||
Via la requête suivante :
Plus simplement, comment détecter si une table est verouillée :
|
| ||
auteur : lalystar | ||
À partir d'Oracle 9i, on peut utiliser le mot-clé default pour spécifier la valeur par défaut d'une colonne :
|
| ||||
auteurs : Jaouad, Laurent Schneider | ||||
Comme le montre l'exemple suivant, lors de vos INSERT/UPDATE,
Oracle retransforme les chaînes vide en valeur nulles, ce qui peut être gênant fonctionnellement,
en particulier pour des applications multi-SGBD.
Une solution consiste à utiliser un caractère ou une chaîne de susbsitution, afin que votre applicatif puisse gérer ces informations de manière distincte. Le plus simple,
si c'est possible, est d'utiliser le caractère espace, ce qui donne, si l'on continue sur l'exemple précédent :
Attention tout de même : Oracle® Database SQL Reference 10g Release 2 (10.2) : Note: Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls. |
| ||||
auteur : Xavier Vlieghe | ||||
Grâce à l'instruction MERGE, à partir de la 9i. Voici sa syntaxe :
Prenons l'exemple d'une table "Article" tout ce qu'il y a de plus classique :
Sa soeur Temp_Article reçoit un fichier de MAJ à jour des prix, sans clé et pouvant contenir de nouveaux articles :
La commande MERGE va nous servir à faire la MAJ des prix et l'intégration des nouveaux articles en une seule commande :
Voici la page Oracle sur laquelle vous trouverez toutes les informations utiles à propos de cette commande : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606 Use the MERGE statement to select rows from one or more sources for update or insertion into one or more tables. You can specify conditions to determine whether to update or insert into the target tables. This statement is a convenient way to combine multiple operations. It lets you avoid multiple INSERT, UPDATE, and DELETE DML statements. MERGE is a deterministic statement. That is, you cannot update the same row of the target table multiple times in the same MERGE statement. | ||||
lien : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606 |
| ||
auteur : Jaouad | ||
Grâce au hint apparue avec la version 10g :
|
| |||
auteur : Xavier Vlieghe | |||
Oracle permet de gérer le concept de requêtes récursives, à l'aide des clauses suivantes :
En voici un exemple, grâce à une table Catégorie comprenant les champs suivants :
Voici la liste des catégories dépendant de la catégorie 1 : Librairie :
A partir de la 9i, vous pouvez également utilisez la fonction SYS_CONNECT_BY_PATH (Champ, séparateur),
qui permet de concaténer les différents valeurs du champ spécifié pour connaître le chemin entre l'élément concerné et le neod racine :
|
| ||
auteurs : Pomalaix, Jaouad, Fred_D | ||
@ désigne la variable ORACLE_SID courante. Est valable dans les scripts SQL, dans divers paramètres de l'INIT.ORA, dans des scripts RMAN notamment. ? désigne la variable ORACLE_HOME courante. Est valable dans les scripts SQL, dans divers paramètres de l'INIT.ORA, dans des scripts RMAN notamment. ! équivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Unix uniquement $ équivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Windows uniquement & permet de désigner une variable SQL*Plus start et @ permet de lancer un script define permet de définir une variable sous Sql*Plus , sans argument elle donne toutes les variables déja défini & permet de définir une variable, && permet de la définir une fois pour toute et pour toute la session. ed permet de lancer le buffer l permet de voir sans l'executer le dernier ordre SQL r permet de voir et executer le dernier ordre SQL c:mot1:mot2 permet de changer toutes les occurences du mot1 par mot2 dans le dernier ordre SQL |
| ||||||||||||||
auteur : PlaineR | ||||||||||||||
Voici les variables d'environnement les plus communes :
syntaxe :
NB : Ce sont les principales, il en existe d'autres (SQL*Plus : Menu Option-> Environment) dont vous trouverez l'explication dans la documentation Oracle.
|
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 © 2006 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.