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 :

Fonction récursive prenant un VARCHAR2 puis plusieurs VARCHAR2 en paramètre [10g]


Sujet :

PL/SQL Oracle

  1. #21
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Mafate Voir le message
    Bonjour à tous,

    WHILE v_itmref_lst <> v_itmref_lst_new

    J'ai cependant une question : dans le code ci-dessus, la variable v_itmref_lst_new est initialisée à ' '. Si à la place je l'initialise à '' (sans espace), cela ne fonctionne plus. Quelqu'un saurait-il me dire pourquoi ?
    Faisons un petit test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    begin
         if '' is null then dbms_output.put_line(''''''||'NULL');  else dbms_output.put_line(''''''||'NOT NULL'); end if;
         if ' ' is null then dbms_output.put_line(''' '''||' NULL');  else dbms_output.put_line(''' '''||'NOT NULL'); end if;
    end;
    Le résultat est le suivant:
    --> Voila la différence
    après c'est la condition WHILE v_itmref_lst <> v_itmref_lst_new qui ne marche plus car on ne fait pas de <> sur des chaines null sinon le résultat est toujours faux.

    Après juste une remarque, j'ai fait mon exemple rapidement et j'ai donc utilisé la fonction la plus simple que j'avais sous la main: WM_CONCAT qui pour moi marche très bien mais il faut savoir qu'elle n'est pas supportée par Oracle:
    Note that WM_CONCAT is undocumented and unsupported by Oracle, meaning it should not be used in production systems. The LISTAGG function, which can produce the same output as WM_CONCAT is both documented and supported by Oracle
    Si tu était en 11g je t'aurais dis d'utiliser LISTAGG.

    Je t'invite à regarder ce lien pour en savoir plus :
    http://www.oracle-base.com/articles/...techniques.php

    Oui il y en a plusieurs manières pour mal écrire une fonction.
    C'est sûr! Mais existe-t-il vraiment une façon de bien écrire une fonction?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    J'ai une phrase que j'aime bien : le NULL est tellement nulle qu'il n'est même pas égale à lui même.

    Et en effet, une chaine vide n'est pas NULL

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Ok, c'est compris !

    Bon week-end et encore un GRAND MERCI !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

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