CURRENT_IDENTITY_VALUE不一致

2020-09-23 20:07发布

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

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


似乎 CURRENT_IDENTITY_VALUE()函数在您的会话中至少有两个带有标识列的表时,HANA中的内容可能会混乱。 只需尝试以下示例代码:

创建列表test1(id整数,不为null,默认情况下作为标识生成主键,x整数);
 创建列表test2(id整数,不为null,默认情况下作为标识生成的主键,x整数);

 创建过程temp_identity_p为
   我整数;
   j整数;
 开始
   对于我1..500
     插入test1(x)值(:i);
     从哑元中选择current_identity_value()到j中;
     如果我> 100,那么
       插入test2(x)值(:j);
     万一;
   结束于
 结束;

 调用temp_identity_p;

 从test1中选择*,其中id <> x;
 从test2选择*,其中id <> x-100按ID排序; 

执行过程后,test1表看起来像预期的那样。 值从1到500," id"和" x"列中的值相同。

但是在test2中,x应该来自test1.id(有点类似于它的链接),延迟为100。所以您期望:

1,101

2,102

3、103等

但并非每条记录都是如此。

4,3

5,4

记录如下。 看起来CURRENT_IDENTITY_VALUE()有时是从test2的最后一个插入而不是test1获得其值的。 但是,很明显,在插入test1之后立即执行CURRENT_IDENTITY_VALUE()。

这非常危险,因为它可能会使您的代码中的外键弄乱。

您知道该问题的任何解决方案吗?

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

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


似乎 CURRENT_IDENTITY_VALUE()函数在您的会话中至少有两个带有标识列的表时,HANA中的内容可能会混乱。 只需尝试以下示例代码:

创建列表test1(id整数,不为null,默认情况下作为标识生成主键,x整数);
 创建列表test2(id整数,不为null,默认情况下作为标识生成的主键,x整数);

 创建过程temp_identity_p为
   我整数;
   j整数;
 开始
   对于我1..500
     插入test1(x)值(:i);
     从哑元中选择current_identity_value()到j中;
     如果我> 100,那么
       插入test2(x)值(:j);
     万一;
   结束于
 结束;

 调用temp_identity_p;

 从test1中选择*,其中id <> x;
 从test2选择*,其中id <> x-100按ID排序; 

执行过程后,test1表看起来像预期的那样。 值从1到500," id"和" x"列中的值相同。

但是在test2中,x应该来自test1.id(有点类似于它的链接),延迟为100。所以您期望:

1,101

2,102

3、103等

但并非每条记录都是如此。

4,3

5,4

记录如下。 看起来CURRENT_IDENTITY_VALUE()有时是从test2的最后一个插入而不是test1获得其值的。 但是,很明显,在插入test1之后立即执行CURRENT_IDENTITY_VALUE()。

这非常危险,因为它可能会使您的代码中的外键弄乱。

您知道该问题的任何解决方案吗?

付费偷看设置
发送
7条回答
樱桃小丸子0093
1楼-- · 2020-09-23 20:50

...,最后一个带有序列的示例显示您将插入序列 我进入test2,而不是for生成的i变量,因此正常情况下,您可能没有test2.x> 100,因为这是两个不同的var。

一周热门 更多>