将字符插入数字数据类型列

Pun*_*wah 0 sql database oracle type-conversion oracle11g

注意:我无法更改列的数据类型

我想将一个字符存储到一个具有数字数据类型的列的表中.

我找到的工作是将字符值转换为ASCII,并从数据库中检索它时将其转换回字符.

我使用了几个函数ASCII和ASCIISTR,但这些函数的限制是它们只转换字符串的第一个字符.

所以我用了dump函数

select dump('Puneet_kushwah1') from dual;
Run Code Online (Sandbox Code Playgroud)

结果:Typ = 96 Len = 15:80,117,110,101,101,116,95,107,117,115,104,119,97,104,49

此函数给出所有字符的ASCII值.然后我执行下面的查询

select replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',',' ') from dual;
Run Code Online (Sandbox Code Playgroud)

结果:80 117 110 101 101 116 95 107 117 115 104 119 97 104 49

然后我用一个特殊字符来填充空间,这样我就可以在从数据库中检索时替换它.

select replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',','040') from dual;

Result: 80040117040110040101040101040116040950401070401170401150401040401190409704010404049
Run Code Online (Sandbox Code Playgroud)

表定义:

create table test (no number);  
Run Code Online (Sandbox Code Playgroud)

然后我把它插入表中

INSERT into test SELECT replace(substr((DUMP('Puneet_kushwah1')),(instr(DUMP('Puneet_kushwah1'),':')+2 )),',','040') from dual;
Run Code Online (Sandbox Code Playgroud)

问题1:当我执行时

select * from test;
Run Code Online (Sandbox Code Playgroud)

我有

结果:8.004011704011E82

我想把它转换成数字.与我插入的完全相同.

问题2:

然后当我执行select时,我希望它返回确切的字符串.

请帮我尝试了很多功能.

提前致谢.

Mar*_*ber 5

您无法获得确切的字符串,因为Oracle数字最多只能存储38位精度.

所以如果你运行这个:

select cast(no as varchar2(100))
from test;
Run Code Online (Sandbox Code Playgroud)

你会得到:

80040117040110040101040101040116040950400000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)