我正在开发一个处理 ORACLE DATABASE的项目。我的项目有两个功能,一个是将表内容提取到一个平面文件,即备份,第二个是将该平面文件恢复到具有相同结构的空白表,即恢复< /强>
我可以为除 RAW | LONG RAW 之外的所有数据类型对象备份和恢复oracle数据库数据。我有一个问题。例如 我将数据库数据备份到字符串中的平面文件中。像
1,"Name", "Class",12.00
现在,如果任何表具有 RAW或LONG RAW 数据类型,那么在插入表时,可以使用 RAWTOHEX 方法将其从任何数据类型插入到原始类型。 为了更好地理解这个案例,我们现在需要两个表格。
一张表说TBLNUM及其列号为NUMBER,RAWINT RAW(2000)
第二个表说TBLCHAR及其列ID NUMBER,RAWCHAR RAW(2000)
因此,我们使用数字将数据插入TBLNUM,将num值插入raw,将TBLCHAR插入仅字符串。
我对这种类型并不十分了解。但我可以按照以下方式取回插入的数据 如果我通过RAWTOHEX(1)插入RAW列的编号,它会以'C102'的形式保存1 我可以使用以下方法取回1 utl_raw.cast_to_number('C102')
我可以为STRING做同样的事情 RAWTOHEX('7D') - &gt; 3744 并通过ult_raw.cast_to_varchar2('3744')获取 - &gt; 7D
首先,如果我错了,请纠正我 第二,如果我是正确的那么我的问题是如何从平面文件中识别给定的RAW列值是从INTEGER VALUE或STRING VALUE创建的
我想找到解决方案,使用该解决方案我可以使用该备份文件将相同的数据插回到不同的数据库表中。数据应该像我在创建平面文件的源表中那样插入。
答案 0 :(得分:0)
我认为您在备份数据库时不应更改原始数据类型的值(不要使用Outputs = list()
Output = str()
with open('Test.txt', "r") as f:
for line in f:
line = line.strip()
if(len(line)):
Output += "{} ".format(line)
else:
Outputs.append(Output)
Output = str()
for Output in Outputs:
print("".join(Output))
和azubi arch=pc mhz#2666 os=linux ipv6net=auto
adrian arch=pc memory#4096 os=solaris11 osdist=opensolaris
)。因此,将原始数据存储为十六进制字符串,然后将十六进制字符串插入目标位置。在sql developer中选择原始数据时,将其表示为十六进制字符串,并将原始数据插入数据库时,您的脚本必须包含十六进制字符串:
cast_to_number
如果程序要从数据库中提取原始数据,则必须将列值作为byte []并将其作为十六进制字符串写入文件中。