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 :

Select qui boucle ou se termine par un Ora-01460


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Select qui boucle ou se termine par un Ora-01460
    Bonjour,

    Je suis nouveau sur ce forum, mon prénom est Patrice.

    Nous sommes entrain de migrer de Oracle 8.0.5 et Forms5.0 vers Oracle 10g et forms9.0

    Nous rencontrons un probleme assez pointu avec cette migration.

    Dans une procedure forms, nous passons un parametre (varchar2) qui intervient dans la clause Where d'un Select.

    1) Si l'appel de cette procedure se fait avec comme parametre un champ d'un Data Block dont la valeur est nul, le Select fonctionne et les
    Select suivant fonctionnent egalement.

    2) Si appel de cette procedure au moins une fois avec un champ d'un Data Block dont la valeur est non null, suivi d'un appel avec toujours un champ data block qui est null : le select boucle et ne sort jamais ou donne un ora-01460.

    3) si on refait le meme genre de test mais en transformant la procedure pour que la clause where n'utilise plus directement le parametre mais passe par une variable intermediaire , il n'y a plus de probleme.

    Pour résumer, il semble donc que le probleme soit la conjugaison de 2 facteurs : 1) passer un champ "data block" dans une procedure qu'il l'utilise dans une clause where. 2) que le premier appel a cette procedure soit avec une valeur non null, suivi d'un appel avec une valeur null.
    Et là, plus rien ne va.

    L'un d'entre vous a-t-il deja rencontré ce probleme ? Une solution ? Pour ma part, je n'ai pas encore trouvé de solution sur metalink.oracle et je j'ai pas trop envie de repasser en revue des milliers de lignes de code pour ce qu'il me semble etre un bug.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Sans le code, nous ne pourrons pas grand chose pour vous.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    le test est assez simple a faire :

    User scott/tiger


    PROCEDURE Proc ( p_loc in varchar2, p_nbr out number ) IS
    z_loc dept.loc%TYPE;
    BEGIN
    z_loc := p_loc;
    select count(*) into p_nbr from dept where loc = p_loc;
    END;



    si je passe l'item d'un block :bl_dept.loc ( basé sur Dept) et que je l'ai transformé en NULL, ca boucle sans fin au 2eme appel de cette procedure pour peu que le premier appel contenait bien une autre valeur que NULL

    Si je remplace la clause "loc=p_loc" par "loc=z_loc", aucun probleme.
    Ok, la valeur null n'est pas traitée ici et les resultats sont aléatoires quand au contenu mais il devrait sortir du Select, non ?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela voudrait dire qu'une conversion implicite est faite au niveau de la valorisation de la variable de procédure, mais pas au niveau du paramètre de la procédure.
    Bizarre...

    le champs de votre block est bien de type VARCHAR2 et vous le forcez à NULL explicitement ? (pas de notion de format dans la valeur transmise ?)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je suis passé par un TAR (bug report) chez Oracle.

    Le probleme est bien connu et non resolu pour les versions anterieures à la 10.1. (bug 3836820). Et le probleme se pose avec le null ou le 'space'

    Attention au piege si vous developpez avec une version anterieure.

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

Discussions similaires

  1. select qui commence par un id connu
    Par nicerico dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/10/2008, 07h40
  2. afficher tout les divs qui ont leurs id commence par la chaine "select"
    Par karimphp dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/01/2008, 15h27
  3. [regexp] Chaine qui se termine par
    Par cootchy dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 28/08/2007, 18h39
  4. Select qui fais une boucle infinie
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 28/03/2006, 17h29

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