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 :

ORA-02014: SELECT FOR UPDATE.


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut ORA-02014: SELECT FOR UPDATE.
    Salut, j'ai un problème.

    J'ai une requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DATA.*
            FROM (
                     SELECT rownum "ZEROWNUM", TABLE_1.* FROM TABLE_1
                      WHERE ....
                       and rownum < 1000) DATA
    WHERE ZERONUM >= 1
    Et je dois ajouter la clause FOR UPDATE à la fin met je pogne le orracode ORA-02014.

    Ce que je dois faire c'est de parcourir 1000 enregistrement et décider si je dois faire une mise à jour sur un enregistrement ou non, ensuite récupèrer les 1000 prochains...ainsi de suite jusqu'à ce qu'il n'y en est plus.

    Je fais cette appel en JAVA et c'est une question de performance...

    On ne veut pas bloquer 100 000 enregistrement non plus avec la clause for update.

    Des solutions/contournements/propositions?


    Merci beaucoup de votre habituelle collaboration.

  2. #2
    Membre éprouvé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 916
    Points : 1 091
    Points
    1 091
    Par défaut
    Quelle version Oracle ?

    .

  3. #3
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Oui, ça doit être une question de performance parce que votre algorithme n’est pas parti pour. Il est toujours plus cher de ramener et filtrer les enregistrements dans la partie client que de la faire sur le serveur.

    Donc un traitement optimal est Update … Set … Where …

    Concernant votre souci vous pouvez contourner ce problème si vous constituez vos lots de mille enregistrements en utilisant des autres critères que le RowNum.

  4. #4
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Je sais que le update...set..where serait mieux.

    Mais je dois récupèrer mes milles contacts, les passer dans un web service et ensuite décider de peut-être en updater seulement 10 sur les 1000.

    Merci pour le rownum, ça semble effectivement être la cause du problème.

    Pourquoi vous dites que ça serait pas performant?

  5. #5
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par tommey Voir le message
    Je sais que le update...set..where serait mieux.

    Mais je dois récupèrer mes milles contacts, les passer dans un web service et ensuite décider de peut-être en updater seulement 10 sur les 1000.

    Merci pour le rownum, ça semble effectivement être la cause du problème.

    Pourquoi vous dites que ça serait pas performant?
    Prenons votre exemple. La table a 100 000 enregistrements, que vous décidez de traiter par lot de 1000, cela fait 100 lots. Disons qu’en moyenne vous mettez à jour 10 enregistrements par lot cella fait 1 000 enregistrements à mettre à jour. Que ‘est que vous pensez que va coûter plus cher, faire un update des 1000 lignes dans la base ou chercher et transférer par le réseau 100 000 enregistrements pour les filler à un Web-Service pour éliminer ensuite 99 % ?

    La règle d’or de l’optimisation : il est toujours plus performant de ne rien faire que de faire pour rien !

    Essayez donc d’avoir une autre approche pour ce problème.

  6. #6
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Je vais regarder ça avec mon architecte.

    Merci!

Discussions similaires

  1. SELECT FOR UPDATE SKIP LOCKED ORA-02014
    Par Moostiq dans le forum PL/SQL
    Réponses: 3
    Dernier message: 21/12/2011, 15h30
  2. [FORMS PL/SQL] Select for Update
    Par taska dans le forum Forms
    Réponses: 3
    Dernier message: 30/08/2006, 11h33
  3. [MySql5]select ... for update
    Par melou dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2006, 12h11
  4. pb PL/SQL ORA-01410 cursor for update & current of
    Par carlitoB dans le forum PL/SQL
    Réponses: 2
    Dernier message: 14/04/2006, 15h59
  5. [Verrou] SELECT FOR UPDATE
    Par e1lauren dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/10/2005, 18h06

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