小编典典

oracle二进制数据类型

sql

有没有一种类型或方式以二进制级别在oracle中存储数据。我对表中的dml和pl / sql的操作都感兴趣。

当前所有二进制元素都以varchar2(1000)=‘11111 …0000.1111’的形式存储,但是操作和数据存储量很大,因此需要一些优化解决方案。如果此数据可以二进制格式存储,则将需要1000/8字节(具有>700mn条记录)

可能的解决方案是对这些操作使用某种Java + Oracle组合。

欢迎提出想法和建议。


阅读 221

收藏
2021-04-17

共1个答案

小编典典

我不确定这是否有帮助,但是您可以使用NUMBER数据类型和bin_to_num函数:

create table test_bin(num_val number, var_val varchar2(1000));

insert into test_bin values(bin_to_num(1,0,1,0,1,0,1,0), '10101010');

select dump(num_val, 17) n, dump(var_val, 17) v from test_bin;

n                     |   v
---------------------------------------------------
Typ=2 Len=3 c2,^B,G   |   Typ=1 Len=8 1,0,1,0,1,0,1,0

如您所见,它是一个排序器-而不是8个字节,您只有3个字节,但仍然不是一个字节

UPDATE 找到了一种将其保存在一个字节中的方法:您可以使用该chr函数

select dump(chr(bin_to_num(1,0,1,0,1,0,1,0))) c from dual;

n                   
--------------------
Typ=1 Len=1 170

因此,您可以继续使用varchar2,但只需将每8位转换为一个char

2021-04-17