0

我正在做一个处理ORACLE DATABASE的项目。我的项目有两个功能,一个是将表的内容提取到一个平面文件中,也就是备份,第二个是将该平面文件恢复到具有相同结构的空白表中,也就是restore

我可以备份和恢复除RAW|LONG RAW之外的所有数据类型对象的 Oracle 数据库数据。我有一个关于它的问题。例如,我将数据库数据备份到字符串 from 中的平面文件中。喜欢

1,"Name", "Class",12.00 

现在,如果任何表具有RAW 或 LONG RAW数据类型,那么在插入表时,它可以使用RAWTOHEX方法从任何数据类型插入到原始类型。 为了更好地理解这个案例,我们现在使用两张表。

  1. 一张表说 TBLNUM 和他们的列 ID NUMBER, RAWINT RAW(2000)

  2. 第二个表说 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') -> 3744 做同样的事情,然后通过 ult_raw.cast_to_varchar2('3744') -> 7D 取回它

首先,如果我错了,请纠正我第二个如果我是正确的,那么我的问题是如何从平面文件中识别给定的 RAW 列值是从整数值或字符串值创建的

我想找到解决方案,使用该备份文件我可以将相同的数据插入到不同的数据库表中。并且数据应该插入到我创建平面文件的源表中。

4

1 回答 1

0

我认为备份数据库时不应该更改原始数据类型的值(不要使用cast_to_numberand cast_to_varchar2)。因此,将原始数据存储为十六进制字符串,然后将十六进制字符串插入到目的地。当您在 sql developer 中选择原始数据时,它表示为十六进制字符串并将原始数据插入数据库,您的脚本必须包含十六进制字符串:

insert into table1 (num_col, varchar2_col1,varchar2_col2,raw_col)
  values(1, 'Name', 'Class', 'C102')

如果您的程序要从数据库中提取原始数据,您必须将列值作为字节 [] 并将其作为十六进制字符串写入文件中。

于 2019-08-06T10:46:26.817 回答