SAP HANA XSA 2.3 SQL JSON DocStore-对SQL中的值进行字符串化

2020-09-20 23:39发布

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

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


嗨,

我想在DocStore中插入值。

这可以手动进行:

插入"虚拟"值('{
 " ID":" 9993",
     " v":" 11",
     " o":" B5000000B82",
     " m":" 0",
     " n":" 0",
     " l":" DE"
     }'); 

但是在我的代码中,我必须将值转换为nvarchar

即
 选择
 CAST(" M" AS NVARCHAR(10)),
 CAST(" P" AS NVARCHAR(20)),
 CAST(" I" AS NVARCHAR(15)),
 ,...
 

强制转换后,此对象中的值如下所示

插入"虚拟"值('{
 " ID":" 47",
     " v":" 01",
     " o":" FB0000508901DE2C1600282C34CFBD2B",
     " m":null,
     " n":null,
     " l":" de-DE"
     }');

 

如果我手动尝试(SQL控制台),则可以正常工作。

我认为问题在于它不适用于变量。

出现此错误:无效参数:

尝试将类型尝试为Nvarchar和字符串。

即
 声明lv_sM NVARCHAR(10);
 DECLVARE lv_sV NVARCHAR(20); .....

  插入"虚拟"值('{
 " M":lv_sM,
     " v":lv_sV,
     " U":lv_sU,
     " a":lv_sA,
     " z":lv_sZ,
     " l":lv_sL
     }'); 

它应与存储过程中的变量一起使用还是有任何限制?

谢谢

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

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


嗨,

我想在DocStore中插入值。

这可以手动进行:

插入"虚拟"值('{
 " ID":" 9993",
     " v":" 11",
     " o":" B5000000B82",
     " m":" 0",
     " n":" 0",
     " l":" DE"
     }'); 

但是在我的代码中,我必须将值转换为nvarchar

即
 选择
 CAST(" M" AS NVARCHAR(10)),
 CAST(" P" AS NVARCHAR(20)),
 CAST(" I" AS NVARCHAR(15)),
 ,...
 

强制转换后,此对象中的值如下所示

插入"虚拟"值('{
 " ID":" 47",
     " v":" 01",
     " o":" FB0000508901DE2C1600282C34CFBD2B",
     " m":null,
     " n":null,
     " l":" de-DE"
     }');

 

如果我手动尝试(SQL控制台),则可以正常工作。

我认为问题在于它不适用于变量。

出现此错误:无效参数:

尝试将类型尝试为Nvarchar和字符串。

即
 声明lv_sM NVARCHAR(10);
 DECLVARE lv_sV NVARCHAR(20); .....

  插入"虚拟"值('{
 " M":lv_sM,
     " v":lv_sV,
     " U":lv_sU,
     " a":lv_sA,
     " z":lv_sZ,
     " l":lv_sL
     }'); 

它应与存储过程中的变量一起使用还是有任何限制?

谢谢

付费偷看设置
发送
2条回答
me_for_i
1楼 · 2020-09-21 00:15.采纳回答

你好德克,

您遇到的问题是您传递了一个JSON字符串,该字符串包含字符串中的变量名称而不是变量内容。 导致无效的JSON对象导致错误。

一种简单的解决方案是仅传递JSON对象而不是JSON字符串。

插入虚拟值({" ID":'9999'," a"::v_test}); 

但不幸的是,目前有一种限制,在这种情况下只能使用常量值和路径表达式。

有效的方法是使用变量内容构建JSON字符串。

声明v_test nvarchar(256):='测试值'; 
声明v_json_string nclob:='{" ID":" 9999"," a":"'||:v_test ||'"}' ; 插入虚拟值(:v_json_string);

从我的角度来看,这有点麻烦,但是将来可能会取消仅在JSON对象中使用常量值和路径表达式的限制。

关于,
弗洛里安

土豆飞人
2楼-- · 2020-09-21 00:09

感谢您的快速回复和提示!

只会纠正自己,今天,我可以轻松地将调试器与JSON对象结合使用。 前几天可能还有其他问题。

我意识到SPS 2和3之间的唯一最大区别是,上下文菜单中的刷新还不够。 我总是必须使用F5进行刷新,以确保刷新了编码并通过使用" Open for Debugging"检查编码来说服自己。

一周热门 更多>