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 :

Procédure PL/SQL avec sql dynamique


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut Procédure PL/SQL avec sql dynamique
    Salut à tous,


    Soit la procedure suivante:

    J’essaye de faire un update sur table. Mais avant de faire le update je veux verifier la syntaxe de mon code sql en l’ecrivant dans une table d’essaie. J’obtient toujours la faute suivante : ORA-00972: identifier is too long

    Quelqu’un peut-il me dire comment faire un update dynamique?

    J’ai lu le cours suivant(http://sheikyerbouti.developpez.com/execute_immediate/), mais n’a malheureusemet pas trouvé mon bonheur.

    Je cherche depuis des heures quelques exemples sur le net en vain.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    CREATE OR REPLACE PROCEDURE table_essaie_update IS 
     
      erreur           varchar2(200);
      stmt_str         varchar2(32000);
      v_table          varchar2(256);
     
      CURSOR c1 IS SELECT * FROM ma_table WHERE id_medecin = '674' ; 
     
     
    BEGIN
     
        FOR c1_rec IN c1 LOOP 
          begin
            delete from table_essaie;
     
            select nom_table into v_table from toute_tables where id = c1_rec.tbl_id;
     
            stmt_str := 'UPDATE' || v_table || 
            'SET
              NAME = ''' || c1_rec.NAME|| ''' ';
     
     
              insert into table_essaie (table_essaie) values (stmt_str);
              execute immediate stmt_str;
              commit;          
     
        exception
                when others then            
            rollback;
                    erreur := substr(sqlerrm,1,200);
            insert into table_essaie (table_essaie ) values (erreur);        
     
            end; 
        END LOOP;
    COMMIT;
    END table_essaie_update;
    Merci d'avance pour votre aide
    Fiona

  2. #2
    Invité
    Invité(e)
    Par défaut
    si vous voulez voir ce que vous lancez en dynamique, utilisez DBMS_OUTPUT : http://sheikyerbouti.developpez.com/pl_sql/?page=Chap7

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Il manque les espaces autour du nom de la table : après update et avant set.
    Quelle est la longueur de la colonne qui stocke la requête ?

  4. #4
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut Waldar,

    la longueur de la colonne qui stocke la requête est VARCHAR2(2000 Byte)

    Fiona

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Par défaut
    et quelque chose comme ca !!!

    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
     
    type r_cursor is ref cursor;
        c_cursor1 r_cursor;
     
        cursor_rc AU_AUX_FT%ROWTYPE;
     
    BEGIN 
    ...
     
    vc2_select := 'SELECT * FROM UOAUP.AU_AUX_FT partition (' || vc2_partition_name || ') where rownum <10';
     
    open c_cursor1 for vc2_select;
        LOOP
            FETCH c_cursor1 INTO cursor_rc;
            EXIT WHEN c_cursor1%NOTFOUND;
            dbms_output.put_line(cursor_rc.EXE_IDT_NUM);
            vc2_requete := 'INSERT INTO ....

  6. #6
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut à tous,

    j'ai resolu le probleme en faisant une insertion en plusieurs partie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into table_essaie (test) values (substr(sql_str,1,2000));
     
    insert into table_essaie (test) values (substr(sql_str,2001,4000));
    Merci encore pour vos propositions
    Fiona

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

Discussions similaires

  1. [SQL] Requête SQL avec 3 tables liées par la même relation
    Par lenstoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/08/2007, 23h32
  2. requete SQL avec where dynamique dans une servlet
    Par Mickael Scofild dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/08/2007, 12h05
  3. [SQL] Requête SQL avec || à la place de CONCAT
    Par Dsphinx dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/07/2007, 15h56
  4. Requête SQL avec groupement dynamique
    Par driou1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/02/2007, 18h31
  5. [SQL] Requete sql avec dates
    Par SergeF dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/03/2006, 16h53

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