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

Sql*Plus Oracle Discussion :

[SQL +] Problem en PL-SQL


Sujet :

Sql*Plus Oracle

  1. #1
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut [SQL +] Problem en PL-SQL
    Bonjour

    Voici mon code en pl-sql
    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
    --
    -- Add record into TemplateTokenMapping
    --
    DECLARE 
      lTemplateNo NUMBER;
    BEGIN
      -- OMC Request
      SELECT templateno INTO lTemplateNo 
                        FROM template 
                        WHERE requesttype='OMC';
    --  INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (8, lTemplateNo);
    --  INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (15, lTemplateNo);
    END;
    .
    run;
    Lorsque j'exécute mon code, le processus gèle. Il faut que je kill le processus ensuite...
    J'ai essayer le meme code dans Toad et tout est OK

    Quelqu'un voit le problème?

    Merci

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    Il faut voir ce qu'il fait durant son blocage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select event from v$session_wait 
    where sid = 'SID'

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    faut voir les plans d'exécutions aussi

  4. #4
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Voici en fichier joint le résultat du select * session_wait

    Je ne vois pas ou est le probleme...
    Vous pouvez maider?
    Images attachées Images attachées  

  5. #5
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Lorsque que je tente de voir le plan dexécution j'obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SP2-0613: 
    
    Unable to verify PLAN_TABLE format or existence
    Donc je suis dans un cul-de-sac!




  6. #6
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Dsl, j'ai fait une erreur dans mon premier message. J'ai mis en commenatire les 2 lignes qui me donne l'erreur. En fait, mon code fait geler mon SQL + lorsque les INSERT sont effectués.

    Donc mon VRAI code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    --
    -- Add record into TemplateTokenMapping
    --
    DECLARE 
      lTemplateNo NUMBER;
    BEGIN
      -- OMC Request
      SELECT templateno INTO lTemplateNo 
                        FROM template 
                        WHERE requesttype='OMC';
      INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (8, lTemplateNo);
      INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (15, lTemplateNo);
    END;
    Je cherche toujours...

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Peut-être un problème de verrouillage ? Vérifiez qu'il n'y a pas d'autre connexion qui exécute les mêmes opérations sur les mêmes données.

    Un SELECT sans clause FOR UPDATE ne devrait pas être bloqué: c'est probablement un INSERT qui bloque dans le cas d'une attente sur un verrou: essayez d'exécuter vos 3 ordres les uns à la suite des autres en dehors de bloc PL/SQL. Quel est celui qui bloque ?

  8. #8
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    je vais peut-être dir une bêtise...
    mais sous SQLPlus il faut un slash ( / ) après le End;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE 
      lTemplateNo NUMBER;
    BEGIN
      -- OMC Request
      SELECT templateno INTO lTemplateNo 
                        FROM template 
                        WHERE requesttype='OMC';
      INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (8, lTemplateNo);
      INSERT INTO TEMPLATETOKENMAPPING (TOKENNO,TEMPLATENO) VALUES (15, lTemplateNo);
    END; 
    /
    alors que sous TOAD il suffit de lancer le code avec F9 SANS le slash !

  9. #9
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Oui tu as raison.. mais j'ai bien mis mon / a la fin dans SQL +. Il doit y avoir quelque chose d'autres!

  10. #10
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    si tu fais le même insert hors PL/SQL, ça marche ou pas ?

    et le Select, hors PL, il ramène bien la valeur attendue ?

  11. #11
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    oui ca marche...
    Jai modifié mon code pour mettre mon Select a l'intérieur de mon Insert. C'est pas tres beau mais ca fonctionne.

    Si jamais vous comprenez pourquoi SQL + refuse de faire fonctionner ma premiere version du code alors je serais tres intéressé a le savoir!

    Merci

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    SI ta session est la 10 ne cherche pas plus tu as juste un probléme de lock

    tu relance la requête sous TOAD et dans une autre fenêtre tu recherche qui bloque qui grâce à ke requête suivante :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    <div style="text-align: left;">SELECT            bs.username "Blocking User", 
             bs.username "DB User", 
             ws.username "Waiting User", 
             bs.sid "SID", 
             ws.sid "WSID", 
             bs.sql_address "address", 
             bs.sql_hash_value "Sql hash", 
             bs.program "Blocking App", 
             ws.program "Waiting App", 
             bs.machine "Blocking Machine", 
             ws.machine "Waiting Machine", 
             bs.osuser "Blocking OS User", 
             ws.osuser "Waiting OS User", 
             bs.serial# "Serial#", 
             DECODE ( 
                wk.TYPE, 
                'MR', 'Media Recovery', 
                'RT', 'Redo Thread', 
                'UN', 'USER Name', 
                'TX', 'Transaction', 
                'TM', 'DML', 
                'UL', 'PL/SQL USER LOCK', 
                'DX', 'Distributed Xaction', 
                'CF', 'Control FILE', 
                'IS', 'Instance State', 
                'FS', 'FILE SET', 
                'IR', 'Instance Recovery', 
                'ST', 'Disk SPACE Transaction', 
                'TS', 'Temp Segment', 
                'IV', 'Library Cache Invalidation', 
                'LS', 'LOG START OR Switch', 
                'RW', 'ROW Wait', 
                'SQ', 'Sequence Number', 
                'TE', 'Extend TABLE', 
                'TT', 'Temp TABLE', 
                wk.TYPE 
             ) lock_type, 
             DECODE ( 
                hk.lmode, 
                0, 'None', 
                1, 'NULL', 
                2, 'ROW-S (SS)', 
                3, 'ROW-X (SX)', 
                4, 'SHARE', 
                5, 'S/ROW-X (SSX)', 
                6, 'EXCLUSIVE', 
                TO_CHAR (hk.lmode) 
             ) mode_held, 
             DECODE ( 
                wk.request, 
                0, 'None', 
                1, 'NULL', 
                2, 'ROW-S (SS)', 
                3, 'ROW-X (SX)', 
                4, 'SHARE', 
                5, 'S/ROW-X (SSX)', 
                6, 'EXCLUSIVE', 
                TO_CHAR (wk.request) 
             ) mode_requested, 
           object_name , 
             TO_CHAR (hk.id1) lock_id1, 
             TO_CHAR (hk.id2) lock_id2 
    FROM     v$lock hk, v$session bs, v$lock wk, v$session ws ,  V$LOCKED_OBJECT a , 
    dba_objects b 
    WHERE    hk.BLOCK = 1 
    AND      hk.lmode != 0 
    AND      hk.lmode != 1 
    AND      wk.request != 0 
    AND      wk.TYPE(+) = hk.TYPE 
    AND      wk.id1(+) = hk.id1 
    AND      wk.id2(+) = hk.id2 
    AND      hk.sid = bs.sid(+) 
    AND      wk.sid = ws.sid(+) 
    AND      a.object_id=b.object_id 
    AND      hk.sid=a.session_id 
    ORDER BY 1;</div>

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Jai modifié mon code pour mettre mon Select a l'intérieur de mon Insert. C'est pas tres beau mais ca fonctionne.
    On peut avoir le code ?

    Vous avez combien de connections sqlplus ouvertes et combien de connections sont en train d'exécuter une version de votre code SQL ou PL/SQL ?

    Pour être sûr de ne pas vous bloquer vous-même, vous pouvez:
    - soit déconnecter chaque connection sqlplus après chaque exécution
    - soit rajouter COMMIT dans votre code ou après l'exécution du bloc PL/SQL pour libérer les verrous.

  14. #14
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Dommage, je n'ai plus acces a la BD du client aujourdhui et jai livré le code fianl en mettant le Select dans mon Insert.

    Par contre, j''aimerais bien savoir pourquoi mettre mon Select direct dans mon Insert regle le probleme. Qu'est-ce qu'on probleme de lock? Je me souviens que j'ai essayé de mettre un commit; dans le code et ca changeait rien...

  15. #15
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    peut-être un soucis avec le paramètre ROW_LOCKING du fichier init...

    source Metalink, note 30803.1
    ROW_LOCKING specifies whether row locks are acquired during UPDATE operations.

    Values:
    • ALWAYS and DEFAULT
      Row locks are acquired. Table locks are not acquired.
    • INTENT
      In addition to row locks, restricted table-level locks are acquired during UPDATE operations.
    The acquisition of table-level locks is a way to ensure data concurrency. However, Oracle Corporation recommends that you use the SQL statement LOCK TABLE for that purpose rather than changing the setting of this parameter from its default setting of ALWAYS.

  16. #16
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    ok merci!

    La prochaine fois je vais regarder de ce coté!

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

Discussions similaires

  1. [SQL] probleme d'encodage sql
    Par ddeee dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2007, 13h41
  2. [SQL] Probleme de requete SQL
    Par soror dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/07/2007, 17h13
  3. [SQL] probleme de logique sql
    Par digger dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/07/2006, 18h53
  4. [SQL] probleme de syntaxe sql avec php
    Par kaygee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/06/2006, 14h32
  5. [postgresql] Probleme de language SQL
    Par sbucci dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/05/2003, 13h19

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