2016-10-14 2 views
0

J'utilise la méthode Asciistr dans un oracle qui est supposé convertir une structure donnée en ascii. caractères arabes sont convertis correctement, mais l'anglais sont toujours les mêmes alors que dans certains convertisseurs en ligne, je peux voir que des chiffres comme 1 et 2 sont convertis en 0031 et 0032. Voici ma méthode:Convertir en ascii en oracle

create or replace procedure replace_ascii(test_var in varchar2,valueRet out varchar2) is 

begin 
    select replace (asciistr(test_var), '\', null) 
    into valueRet 
    from dual;   
end replace_ascii; 

Je remplace actuellement les numéros avec leur valeur attendue de cette façon:

select replace(replace (valueRet,'1','0031'),'2','0032') 
.... 
into valueRet 
from dual; 

Mais je ne veux pas utiliser 'replace' 20 fois pour retourner la valeur correcte. Quel est le meilleur moyen de convertir ces caractères?

1 -> 0031

2 -> 0032

A -> 0041

......

Suis-je manque quelque chose ici? VEUILLEZ cocher ce lien http://r12a.github.io/apps/conversion/ et essayer de convertir les chiffres et les lettres en anglais, et vérifier le résultat de la dernière balise.

Répondre

1

Comme je comprends, vous voulez convertir n'importe quelle chaîne à la suite de 4 chiffres tuple. Je pense que vous les fonctions devrait ressembler à

CREATE OR REPLACE FUNCTION to_ascii(str_a VARCHAR2) RETURN VARCHAR2 IS 
    l_str VARCHAR2(32767); 
    l_res VARCHAR2(32767); 
    i  NUMBER := 0; 
    l_char VARCHAR2(1 CHAR); 
BEGIN 
    l_str := asciistr(str_a); 
    WHILE i < length(l_str) 
    LOOP 
     i  := i + 1; 
     l_char := substr(l_str, i, 1); 
     /*l_res := l_res || '\';*/ 
     IF l_char = '\' THEN 
      l_res := l_res || substr(l_str, i + 1, 4); 
      i  := i + 4; 
     ELSE 
      l_res := l_res || ltrim(to_char(ascii(l_char), '00XX')); 
     END IF; 
    END LOOP; 
    RETURN l_res; 
END; 
+0

Merci beaucoup –

0
select case when length(asciistr(test_var)) = 1 then to_char(ascii(test_var)) else to_char(asciistr(test_var)) end as value 
    from dual; 

Essayez ceci.

+0

test_var est une structure pas un caractère, ascii convertit 1 à 49, 2 à 50 ... ce n'est pas la solution @Kacper –

+0

@ H.Al Je pensais que vous » re le faire char par char. Dans ce cas, ce n'est pas la solution, sauf si vous voulez itérer char par char dans varchar – Kacper

+0

Alors, quelle est la solution? ce qu'ils font? Une idée? @Kacper –