Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ORACLE] La clause UPDATE

Sujet résolu
Anonyme
    4 mai 2011 à 15:21:34

    Salut à tous,

    Voilà j'ai un petit souci de compéhension au niveau de la clause UPDATE. Voici l'énoncé de l'exercice :

    Citation : énoncé

    Écrire une fonction stockée Fcondense(Chaine) recevant une chaîne de caractères et restituant la chaîne en majuscule en ayant extrait les caractères spéciaux, les blancs et en transformant les caractères accentués en caractères de base. Ajoutez à la table EMPLOYE la colonne EMPNOMCD et affectez lui les noms condensés. [Consultez le SQL User's guide d'Oracle pour l'utilisation de la fonction Translate]



    La fonction :
    CREATE OR REPLACE FUNCTION FCondense(chaine VARCHAR2)
    	RETURN VARCHAR2 AS
    	
    BEGIN
    	RETURN TRANSLATE(UPPER(chaine),'éàèâêùïöôòç'' ',UPPER('eaeaeuioooc'));
    END;
    


    La modification de la table Employe avec la création de la colonne "EmpNomCD" :
    ALTER TABLE Employe ADD EmpNomCD VARCHAR2(30) NOT NULL;
    COMMIT;
    


    Et je bloque pour l'utilisation de la clause UPDATE. Je dois utiliser la fonction "FCondense" pour ajouté à chaque colonnes de chaque lignes le nom de l'employé condensé.
    Quelqu'un pourrait m'aider pour trouver les lignes à écrire pour cette modification ?

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2011 à 18:17:44

      Tu es sûr que ta fonction te retournera ce que tu veux ?
      Tu transformes la chaine en majuscule et dans ce résultat tu cherches à remplacer des lettres avec accents qui sont en minuscules. Je te parie qu'il n'en trouvera aucune :p

      En gardant ton idée, moi j'aurai plutôt fait :
      RETURN UPPER(TRANSLATE(LOWER(chaine),'éàèâêùïöôòç'' ','eaeaeuioooc'))
      

      Ici, tu convertis la chaine en minuscule (et oui, il peut très bien y avoir des lettres accentuées en majuscules), ensuite tu recherches les lettres accentuées et tu les remplaces par leur version non-accentuée. Et pour finir tu convertis le tout en majuscule.

      Ensuite pour l'UPDATE c'est plutôt simple, tu fais une requête normale, à la place de "chaine" tu dois mettre la colonne de la table qui contient le nom des employés, et bien sûr tu fais l'UPDATE sur la colonne que tu viens de créer. (Ex: UPDATE ta_table SET EMPNOMCD = ta_fonction(colonne_nom_pas_condense) )

      Par contre attention, tu ne peux pas ajouter une colonne NOT NULL dans une table qui contient déjà des entrées. Il faut dans ce cas lui ajouter une valeur par défaut.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        5 mai 2011 à 18:18:34

        Là j'utilise Oracle 10g Express Edition pour travailler chez moi et ne pas être dépendant de la base de données de l'école.

        Voici un petit screen qui montre que le upper sur un caractère comme 'é' ne change rien du tout, et pour ma part je trouves cela quand même bizarre !!
        Image utilisateur

        J'ai quand même modifié la fonction dont voici le code :
        CREATE OR REPLACE FUNCTION FCondense(chaine VARCHAR2)
        	RETURN VARCHAR2 AS
        		
        BEGIN
                RETURN TRANSLATE(LOWER(chaine),'éàèâêùïöôòç'' ','eaeaeuioooc');
        END;
        


        Et voici le résultat obtenu :
        Image utilisateur

        Toujours le même problème .. Est-ce que le problème viendrait du faites que j'utilise l'interface web pour encoder mes fonctions ? Ce qui entrainerait un souci au niveau du codage des caractères .. ?
        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2011 à 10:30:29

          En effet, je ne saurai pas t'expliquer pourquoi à l'heure actuelle. En tout cas sur SQL Developer il n'y a pas ce problème (upper('é') renvoie bien É).
          • Partager sur Facebook
          • Partager sur Twitter

          [ORACLE] La clause UPDATE

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown