IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Procedure oracle 10


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut Procedure oracle 10
    bonjour tout le monde,

    Aujourd'hui je viens avec un problème qui me fatigue énormément, voilà je veut faire une base de données en oracle 10g, après que je finis de créer les tables, je me suis dis de faire des procédures qui vont me permettre de renseigner les tables, mais voilà ce qu'on me dit si je fais une procédure:
    "Procédure crée avec erreur de compilation"
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create procedure(parametres) IS
    BEGIN
    INSERT INTO table(champs) values(parametres);
    end;
    /
    Merci de me venir en aide

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Le plus simple dans ce cas, c'est de consulter la vue USER_ERRORS pour avoir le détail des erreurs.
    En revanche, fournir une espèce de pseudo-code comme vous l'avez fait ne sert à rien. Etant donné que les erreurs de compilation sont dues soit à une syntaxe incorrecte, soit à des objets inexistants, seul le code réel permet de mettre le doigt sur les problèmes.

  3. #3
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    Pour faire tel instruction dans une procédure, utilise comme suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create procedure test IS
    BEGIN
    execute immediate 'INSERT INTO table(champs) values(parametres)';
    commit;
    end;


  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par islamov2000 Voir le message
    Pour faire tel instructiondansune procédure, utilise...
    Dans la compétition "comment écrire le pire du code en PL" votre exemple attire l'attention.

  5. #5
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    @mnitu. je ne comprend pas pourquoi ton commentaire. si tu as voulu parler de create procedure(parametre) je n'ai pas fait attention, et si tu veux parlé du principe, où est le problème.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Votre exemple de deux lignes de code (si on ignorer les lignes inévitables à la définition de la procédure) montre deux mauvaises habitudes de programmation :
    1. employer le sql dynamique inutilement
    2. faire commit dans une procédure

    Donc deux sur deux ce n’est pas si mal !

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Le problème avec votre code, c'est qu'il n'y a aucun besoin d'utiliser du SQL dynamique (EXECUTE IMMEDIATE) pour faire un simple INSERT.

    Le SQL dynamique s'impose quand :
    • la requête est construite durant l'exécution (par exemple, on ne sait pas à l'avance sur quelles tables elle va porter)
    • on veut effectuer une commande du LDD (CREATE, ALTER, DROP...)


    Il faut préciser que si l'inconnue porte seulement sur la valeur de comparaison dans un prédicat, il n'y a pas besoin de SQL dynamique, car une simple variable suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    WHERE matricule = v_mat

Discussions similaires

  1. Procedures Oracle interrogation variable
    Par ecureuilmasque dans le forum SQL
    Réponses: 0
    Dernier message: 08/04/2008, 17h37
  2. syntaxe procedure oracle
    Par BO_STEPHANE dans le forum SQL
    Réponses: 2
    Dernier message: 21/02/2008, 19h09
  3. Réponses: 2
    Dernier message: 28/08/2006, 11h00
  4. Réponses: 4
    Dernier message: 21/06/2005, 16h45
  5. [C#] Problème de récupération d'une procédure Oracle
    Par minnieBis dans le forum ASP.NET
    Réponses: 11
    Dernier message: 20/04/2004, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo