Table des matières

FAQ pour les TME SQL et PL/SQL

Lire attentivement Connexion Oracle 10g (plus en service, voir documentation Oracle 11) et Documentation sur Oracle 10G

Rappel: l'accès à Oracle se fait avec l'outil client sqlplus

Ce document contient 2 sections : une pour sqlplus, l'autre pour PL/SQL

1) Questions sur le client ''sqlplus''

Question Réponse
Sous sqlplus, l'exécution de mon fichier ne renvoie aucun message… Ajouter un point-virgule à la fin de l'ordre SQL. Ou ajouter une barre / à la fin du bloc PL/SQL.
sqlplus affiche le nombre 2 au lieu d'afficher le résultat de la requête Ajouter un point-virgule en fin de requête
Comment éviter l'erreur suivante ? SP2-0734 commande inconnue au début de …le reste de la ligne est ignoré Ne pas insérer de ligne vide au milieu d'un ordre SQL. Autre réponse: autoriser les lignes vides : set sqlbl on
Comment supprimer le message suivant ? Entrée limitée a nn caratères Ajouter un retour chariot (Entrée) à la fin de votre fichier
Comment éviter que le résultat d'une requête soit découpé en blocs de 20 tuples ? set pagesize 200
Comment afficher un tuple long sur une seule ligne set linesize 180 (valeur supérieure à la longueur du n-uplet)
Comment enregistrer une trace d'exécution ? Copier-coller le résultat de l'exécution vers l'éditeur de texte. Autre réponse, enregistrer la trace dans le fichier trace.lst
spool trace
@requete (ou toute autre commande)
… etc. …
spool off
Attention, le fichier trace.lst est écrasé à chaque enregistrement de trace.
Quelle est l'erreur dans la requête suivante ?
select *
from Gain
where NomSponsor=&NomSponsor
Vous utilisez une variable de substitution au lieu d'une variable PL/SQL.
solution1: saisir 'Reebok' entre apostrophes au lieu de Reebok
solution2 : mettre la variable de substitution entre apostrophes :
where NomSponsor='&NomSponsor'
solution 3: utiliser une variable PL/SQL.
Quelle est la syntaxe pour les commentaires ? Deux tirets consécutifs en début de ligne :
-- un commentaire
Pour commenter un bloc entier, même syntaxe qu'en java:
/
L'invite est DOC> au lieu de SQL> Il manque la marque de fin de commentaire '*/'
Ctrl-C pour retrouver l'invite SQL>
Comment éditer des requêtes en couleur ? Avec l'éditeur emacs : Alt-x sql-mode puis Menu SQL > highlighting > oracle keywords
Comment avoir l'historique des commandes entrées sous sqlplus Utiliser sqlplus à l'intérieur d'emacs :
Dans la fenêtre sqlplus interactive d'emacs (*SQL*).
L'historique des commandes est : Ctrl FlècheHaut : commande précédente
Ctrl FlècheBas : commande suivante
Ne pas utiliser la fenêtre *SQL* pour saisir vos requêtes, mais éditer vos requêtes dans une autre fenêtre.
Erreur ORA-00054: resource occupée …NOWAIT Fermer toutes vos connexions à oracle, puis attendre quelques minutes et recommencer…
blocage provoqué par une session concurrente qui met à jour la définition de vos tables
Quel est le schéma de la relation R ? describe R (ou desc R sans point virgule)
Quelle est la valeur par défaut des paramètres de l'environnement sqlplus show all (affiche la liste des paramètres)
'Qui suis-je ?' show user
ou
select username from v$session where sid = (select distinct sid from v$mystat);
Erreur ORA-06553: PLS-306: numéro ou types d'arguments erronés dans appel à 'OGC_X' Ambigüité entre votre variable nommée 'x' et un objet prédéfini de même nom %%%dans votre requête, renommer votre variable 'x' (en 'x1' par exemple)

Ma requête SQL suivante est correcte mais elle semble durer un temps “infini” …

SELECT COUNT(*) 
FROM C; --affiche le nombre de Clubs

Enlever le commentaire (les doubles tirets) sur la ligne du FROM ou du WHERE. Ne jamais mettre de commentaire sur la même ligne que la requête. Séparer les lignes de commentaires des lignes de la requête. Vérifier que vous avez bien l'invite SQL> dans le buffer *SQL* avant d'exécuter une requête

2) Questions sur la programmation en PL/SQL

Question Réponse
Comment 'effacer tous' les types, tables et procédures que j'ai créés @vider
Le type booléen existe-t-il ? Oui: BOOLEAN
Mon programme ne produit plus aucun affichage… Ajouter SET SERVEROUTPUT ON
Comment compiler un type ou une procédure ? La commande est '/' (la barre de division) ou run
Comment afficher les erreur de compilation ? show err
ou
select * from user_errors;
Comment afficher le nom de tous les objets définis par l'utilisateur (table, type, trigger, fonction, …) ? @liste
ou
call(liste_source());
ou
select object_name, object_type, status from user_objects order by object_name;
Comment afficher le code source d'une fonction avec les numéros de ligne @source nom_fonction
ou
call(code_source('nom_fonction'));
ou
select * from user_source where name = 'nom_fonction' order by type, line;
Que faire en cas d'erreur 'ORA-21700': l'objet n'existe pas ou va être supprimé ? Fermer la session oracle et se reconnecter. Explication: vous tentez d'accéder à des types ou des objets précédemment supprimés.

Aller vers Connexion Oracle 10g (plus en service, voir documentation Oracle 11), Documentation sur Oracle 10G, FAQ pour les TME SQL et PL/SQL