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

 Oracle Discussion :

[Oracle 9i]Créer une procédure avec TOAD


Sujet :

Oracle

  1. #1
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut [Oracle 9i]Créer une procédure avec TOAD
    Bonjour à tous,

    Je viens vous déranger pour une question qui a sans doute déjà été posée mille fois mais bon...

    Pour alimenter une BDD, j'utilisais alors un certain nombre de requêtes : CREATE TABLE, ALTER TABLE, INSERT, TRUNCATE, UPDATE avec pour chacune, bien évidemment, un COMMIT.

    Pour lancer cette mise à jour, j'ai copié toutes ces requêtes à la file dans un fichier. Désormais, je n'ai donc qu'à copier le contenu de ce fichier dans l'Editor de TOAD et de faire un "Execute as script".

    Il m'a récemment été demandé de créer une procédure (1ere fois pour moi) englobant toutes ces requêtes de mise à jour afin que celle-ci puisse être lancée automatiquement via un job (non-Oracle le job)

    J'ai donc essayé de créer une procédure via le formulaire correspondant. Dans le code généré, j'ai ajouté mes instructions entre le "BEGIN" et le "EXCEPTION". Le hic, c'est lorsque j'exécute pour compiler, j'ai une erreur sur ma première ligne de code me stipulant :
    "Found 'ALTER', CASE is expected" et donc avec un message "Warning : compiled but with compilation errors"

    J'avoue que je patauge un peu et que je ne vois pas où je fais une erreur.
    Si quelqu'un peut m'aider...

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Deux choses :
    - Pas besoin de commit après CREATE, ALTER et TRUNCATE.
    - Si vous postiez votre code (vous pouvez changer les noms) nous vous aiderions beaucoup mieux !

  3. #3
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Mon code n'a rien d'extraordinaire, et fonctionne très bien quand je l'exécute directement dans l'Editor.

    Par rapport à mon message d'erreur : "Found 'ALTER', CASE is expected"
    je pense qu'il parle d'alter car ma première instruction est un ALTER TABLE...

    Voici une partie de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ALTER TABLE HISTORIQUE
    DROP COLUMN DELAI;
    COMMIT;
     
    ALTER TABLE HISTORIQUE
    DROP COLUMN DELAI_QUA;
    COMMIT;
     
    ALTER TABLE HISTORIQUE
    DROP COLUMN DELAI_QUA_OK;
    COMMIT;
     
    (...)
     
    TRUNCATE TABLE CLIENTS; 
    INSERT INTO CLIENTS 
    SELECT * FROM CLIENTS@db_prod;
    COMMIT;
     
    (...)
     
    UPDATE HISTORIQUE
    SET DELAI = round(HISTORIQUE.HI_DATE_ANNULE-HISTORIQUE.HI_DATE_CREA,0)
    WHERE HI_DATE_ANNULE is not null;
    COMMIT;
     
    (...)
    Sinon, j'ai bien compris pour les COMMIT. Cependant, faut-il quand même en placer un en toute fin ou la procédure en fait-elle un d'elle-même ?

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bon, je pense avoir trouvé...

    Apparemment le CREATE, TRUNCATE et ALTER ne sont pas acceptés dans une procédure... Pourriez-vous me le confirmer ?

    Sinon, en regardant les différences entre TRUNCATE et DELETE (qui lui est apparemment accepté) j'ai pu voir que le DELETE sera beaucoup plus long car Oracle va d'abord copier les données dans la table du ROLLBACK. En plus l'instruction DELETE ne libère apparemment pas de mémoire dans le TABLESPACE... Tout ça est assez gênant... Il n'y a vraiment pas moyen d'avoir un TRUNCATE dans une proc ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Mais si rassurez-vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE('truncate table CLIENTS');

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Ca y est, ma procédure est bien compilée sans erreur...
    Pour cela j'ai retiré mes ALTER TABLE et me suis débrouillé autrement. Et j'ai donc remplacé mes par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE('TRUNCATE TABLE xxx');
    Merci beaucoup en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une procédure stockée sous MySQL avec phpmyadmin
    Par Jordan59 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 17/08/2011, 14h08
  2. Oracle : créer une table avec AUTO_INCREMENT
    Par nynnie7 dans le forum Oracle
    Réponses: 4
    Dernier message: 24/01/2010, 19h14
  3. [2005] Créer une procédure avec pour paramètre une table
    Par Sergejack dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/10/2009, 14h22
  4. Créer une fiche avec des procédures et fonctions
    Par ibrahim26 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/12/2008, 01h54
  5. Réponses: 1
    Dernier message: 18/04/2007, 23h02

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