Oracle 与 HANA 字符数据类型处理

Oracle vs HANA char data type handling

我们将 Oracle 作为源,将 HANA 1.0 sps12 作为目标。我们通过实时复制使用 Informatica CDC 将 Oracle 镜像到 HANA。在 Oracle 中,对于许多列,我们将数据类型设置为 CHAR,即固定长度数据类型。由于 HANA 官方不支持 CHAR 数据类型,因此我们使用 NVARCHAR 数据类型而不是相同的数据类型。我们面临的问题是——因为在 Oracle 中,CHAR 数据类型是固定长度的,只要实际字符串的长度小于数据类型,就会附加空格,我们在目标 HANA 数据库中有很多额外的空格用于此类列。

例如。如果列 col1 的数据类型为

CHAR(5)

和值为 'A',它在 HANA 中被复制为 'A ''A' 附加了四个额外的空格,导致查询和数据解释中的很多问题

是否可以在 HANA 中实现类似 CHAR 的数据类型?

我不了解 HANA,这更像是评论而不是答案,但我选择把它放在这里是因为我希望您能看到一些代码。

这是一个 table,其列是 CHAR 数据类型:

SQL> create table test (col char(10));

Table created.

SQL> insert into test values ('abc');

1 row created.

列的长度为 10(您已经知道):

SQL> select length(col) from test;

LENGTH(COL)
-----------
         10

但是,如果你 TRIM 它,你会得到更好的结果,你正在寻找的那个:

SQL> select length(  TRIM  (col)) from test;

LENGTH(TRIM(COL))
-----------------
                3

SQL>

因此:如果您可以说服 镜像过程对这些列应用TRIM 函数,您可能会得到想要的结果。


[编辑,在看到 Lars 的评论并重新阅读问题后]

对;这个问题似乎与我最初理解的恰恰相反。如果那是重点,也许 RPAD 会有所帮助。这是一个例子:

SQL> create table test (col varchar2(10));

Table created.

SQL> insert into test values ('abc');

1 row created.

SQL> select length(col) from test;

LENGTH(COL)
-----------
          3

SQL> insert into test values (rpad('def', 10, ' '));

1 row created.

SQL> select col, length(col) len from test;

COL               LEN
---------- ----------
abc                 3
def                10

SQL>

您可以在将数据传输到 Hana 时使用 Informatica 中的 RPAD 功能。只需确保 Hana 不会自动 trim。

因此,对于 CHAR(5) 源列,您应该使用:

out_Column = RPAD(input_Column, 5)

非常准确,如文档所述: