SAP IQ:空间通过二进制加载变为空字符串

2020-09-22 09:54发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

请帮助我以二进制模式加载空间数据。

IQ 15.4
Linux RHEL 6

我想将IQ表迁移到另一台IQ服务器。
两个IQ均在RHEL 6上运行15.4。

我使用
设置临时选项temp_extract_binary ='ON'导出了在varchar列中具有空格的表

然后,使用"加载表...带空字节的二进制文件"导入导出的文件。
加载后,我发现源表中的空格变为空字符串(0x00000 ...)。

我怎么了?

请看我做了什么。
(对不起,我是ASE员工,这是isql中的Transact-SQL)

1>创建表sp(varchar(7)为null)
2>进行

/*插入不同长度的空格*/

1>插入sp值(space(1))
2>插入sp值(space(2))
3>插入sp值(space(3))
4>插入sp值 (space(4))
5>插入sp值(space(5))
6>插入sp值(space(6))
7>插入sp值(space(7))
8>插入sp值(空)
9>继续

/*确保每行的数据长度*/
1>从sp
2>中选择datalength(a)go
datalength(sp.a)
----- -----------
1
2
3
4
5
6
7
NULL

(受影响的8行)

/*以二进制模式导出表的内容*/

1>设置临时选项temp_extract_name1 ='sp.txt'
2>设置临时选项temp_extract_binary ='ON'
3>转到
1> select * from sp
2>转到< br> a
---------------------

(受影响的0行)
1>退出

-bash-3.00 $ isql -UDBA -Psql -Siqdb

/*清空目标表*/

1>删除sp
2>继续

/*使用空字节加载表二进制*/

1>加载表sp
2>(具有空字节的二进制文件)
3>来自'sp.txt'
4>格式二进制文件
5>引用了
6> 逃脱;
7>转到
(受影响的8行)

/*加载后,数据长度为0。发生了什么? */

1>从sp
2选择datalength(a)go
datalength(sp.a)
----------------
0
0
0
0
0
0
0

(受影响的8行)

/*空格更改为NULL字符串(0x000000 ...)*/

1>从sp
2>选择convert(binary(7),a)go
a
----------------
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
NULL

(受影响的8行)
1>

如何用二进制模式导出/导入空格?
我要用ASCII格式吗?

关于
大谷一夫

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

请帮助我以二进制模式加载空间数据。

IQ 15.4
Linux RHEL 6

我想将IQ表迁移到另一台IQ服务器。
两个IQ均在RHEL 6上运行15.4。

我使用
设置临时选项temp_extract_binary ='ON'导出了在varchar列中具有空格的表

然后,使用"加载表...带空字节的二进制文件"导入导出的文件。
加载后,我发现源表中的空格变为空字符串(0x00000 ...)。

我怎么了?

请看我做了什么。
(对不起,我是ASE员工,这是isql中的Transact-SQL)

1>创建表sp(varchar(7)为null)
2>进行

/*插入不同长度的空格*/

1>插入sp值(space(1))
2>插入sp值(space(2))
3>插入sp值(space(3))
4>插入sp值 (space(4))
5>插入sp值(space(5))
6>插入sp值(space(6))
7>插入sp值(space(7))
8>插入sp值(空)
9>继续

/*确保每行的数据长度*/
1>从sp
2>中选择datalength(a)go
datalength(sp.a)
----- -----------
1
2
3
4
5
6
7
NULL

(受影响的8行)

/*以二进制模式导出表的内容*/

1>设置临时选项temp_extract_name1 ='sp.txt'
2>设置临时选项temp_extract_binary ='ON'
3>转到
1> select * from sp
2>转到< br> a
---------------------

(受影响的0行)
1>退出

-bash-3.00 $ isql -UDBA -Psql -Siqdb

/*清空目标表*/

1>删除sp
2>继续

/*使用空字节加载表二进制*/

1>加载表sp
2>(具有空字节的二进制文件)
3>来自'sp.txt'
4>格式二进制文件
5>引用了
6> 逃脱;
7>转到
(受影响的8行)

/*加载后,数据长度为0。发生了什么? */

1>从sp
2选择datalength(a)go
datalength(sp.a)
----------------
0
0
0
0
0
0
0

(受影响的8行)

/*空格更改为NULL字符串(0x000000 ...)*/

1>从sp
2>选择convert(binary(7),a)go
a
----------------
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
0x00000000000000
NULL

(受影响的8行)
1>

如何用二进制模式导出/导入空格?
我要用ASCII格式吗?

关于
大谷一夫

付费偷看设置
发送
2条回答
Aaron 3364
1楼-- · 2020-09-22 10:16

你好

我回答了自己的问题。

我在IQ 16.0的
"参考:构件块,表和过程"中找到了描述

5.1.4 VARCHAR数据和尾随空白

使用INSERT,UPDATE或LOAD TABLE插入的数据可以是:
-用引号引起来
-不用引号引起来
-二进制

对于LOAD语句,可以使用STRIP RTRIM/OFF LOAD选项指定是否修剪尾随空白。 STRIP RTRIM/OFF选项仅适用于可变长度的非二进制数据。

对于二进制数据,尾随空白始终被修剪。 <-*****

"总是修剪尾随空白。"
这意味着如果数据仅是空白,则将其修剪并变为空字符串。

我的问题:二进制加载将空格变为空字符串
->事实证明这是一种规范,是一种预期的行为。

大谷一夫

半个程序猿
2楼-- · 2020-09-22 10:23

嗨,

我刚刚在Google搜索后遇到此页面,因为我也遇到了同样的问题。

解决这个问题的方法是使用插入位置。 不会为此修剪任何空格或尾随空格。

此致

Asif。

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...