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 :

Noyau 8.1.7 et UTL_ENCODE


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    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
    Par défaut Noyau 8.1.7 et UTL_ENCODE
    Bonjour,
    Le package système UTL_ENCODE n'existe pas encore en 8.1.7. J'ai trouvé un lien vers ce qui semble être une solution, cependant ce lien est mort:
    http://www.oracle.com/us/technology/...4demo8_sql.txt
    Quelqu'un a t-il conservé ce script ? ou sinon, connait une solution pour décoder du base64 avec un noyau 8.1.7 ?
    D'avance merci

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu peux pas le coder en pl ?

  3. #3
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par McM Voir le message
    Tu peux pas le coder en pl ?
    Et bien, si je pouvais le faire, je ne posterais pas cette question ici

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    J'essaye de te coder ça

  5. #5
    Expert confirmé
    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
    Par défaut
    Le but est de remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(LR$Raw))
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rawData := utl_encode.BASE64_DECODE(utl_raw.CAST_TO_RAW(PC$Chunk));

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bon, je t'ai fait le ENCODE, c'est du brut (variables non normées, dbms, etc...)
    J'améliorerai après avoir fait le decode.
    ma référence : http://en.wikipedia.org/wiki/Base64

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    DECLARE
    	v_retour VARCHAR2(4000);
      v_chaine VARCHAR2(2000) := 'any carnal pleasure'; --' is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.';
      v_b64 VARCHAR2(24); -- binaire de 3 char => 4 car 64
    	len NUMBER;
      j NUMBER;
      v_bin VARCHAR2(6);
    	-- fonction decimal en binaire
    	FUNCTION dec2bin (N IN number) RETURN varchar2 IS
        binval varchar2(64);
        N2 number := N;
      BEGIN
        WHILE N2 > 0
        LOOP
          binval := MOD(N2, 2) || binval;
          N2 := TRUNC( N2 / 2 );
        END LOOP;
        RETURN binval;
      END dec2bin;
      FUNCTION bin2dec (binval IN char) RETURN number IS
      result            number := 0;
      current_digit     char(1);
      current_digit_dec number;
      BEGIN
        FOR i IN 1..LENGTH(binval) LOOP
           current_digit := SUBSTR(binval, i, 1);
           current_digit_dec := TO_NUMBER(current_digit);
           result := (result * 2) + current_digit_dec;
        END LOOP;
        RETURN result;
      END bin2dec;
      FUNCTION car64(p_num IN number) RETURN varchar2
      IS
      BEGIN
      	-- Renvoit A-Z
      	IF p_num BETWEEN 0 AND 25 THEN RETURN CHR(65 + p_num); END IF;
    		-- a-z
      	IF p_num <= 51 THEN RETURN CHR(71 + p_num); END IF;
     		-- 0-9
      	IF p_num <= 61 THEN RETURN CHR(-4 + p_num); END IF;
        IF p_num = 62 THEN RETURN '+'; END IF;
        IF p_num = 63 THEN RETURN '/'; END IF;
    		RAISE_APPLICATION_ERROR(-20001, 'Pb num appel car64 :'|| p_num);
      END;
    --
    BEGIN
    --
    	len := LENGTH(v_chaine);
    	-- On boucle par 3 car qui seront transformés en 4
    	FOR i IN 1 .. CEIL(len/3)
      LOOP
        v_b64 := LPAD(dec2bin(ASCII(SUBSTR(v_chaine, 3*(i-1)+1, 1))),8,'0');
    		-- si le car suivant existe
        IF 3*(i-1)+2 <= len
        THEN
    	    v_b64 := v_b64 || LPAD(dec2bin(ASCII(SUBSTR(v_chaine, 3*(i-1)+2, 1))),8,'0');
          -- si le car suivant existe
          IF 3*(i-1)+3 <= len
          THEN
            v_b64 := v_b64 || LPAD(dec2bin(ASCII(SUBSTR(v_chaine, 3*(i-1)+3, 1))),8,'0');
      		ELSE
          	-- On rajoute des '0' pour arriver à 18 bits (3 car 64)
    	      v_b64 := RPAD(v_b64, 18, '0');
          END IF;
         ELSE
         	-- On rajoute des '0' pour arriver à 12 bits (2 car 64)
    	      v_b64 := RPAD(v_b64, 12, '0');
         END IF;
       --  DBMS_OUTPUT.put_line(v_b64);
    		-- On crée les caractères en B64 (codés sur 6 bits)
        -- On lit par 6 bits x 4
        FOR i IN 0..3
        LOOP
        	v_bin := SUBSTR(v_b64, 6*i+1, 6);
         -- DBMS_OUTPUT.put_line(i||':'||v_bin ||':'|| bin2dec(v_bin));
          IF v_bin IS NOT NULL
          THEN
          	v_retour := v_retour || car64(bin2dec(v_bin));
          ELSE
          	v_retour := v_retour || LPAD('=', 4-i, '=');
            EXIT;
          END IF;
        END LOOP;
      END LOOP;
      DBMS_OUTPUT.put_line(v_retour);
    END;

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

Discussions similaires

  1. Erreur de compilation du noyau
    Par pierreg dans le forum Administration système
    Réponses: 12
    Dernier message: 31/01/2007, 18h53
  2. Problème de modules (noyau 2.6.6)
    Par Francois Trazzi dans le forum Administration système
    Réponses: 14
    Dernier message: 04/06/2004, 00h13
  3. Noyau
    Par wincroc dans le forum Administration système
    Réponses: 2
    Dernier message: 03/07/2003, 08h33
  4. Recompilation du noyau
    Par keikoz dans le forum Administration système
    Réponses: 7
    Dernier message: 17/02/2003, 23h54
  5. Primitive du noyau
    Par freud dans le forum Programmation d'OS
    Réponses: 5
    Dernier message: 25/11/2002, 03h17

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