通过变量选择计算视图时出错

问题描述

我在通过变量从计算视图读取时遇到一个有趣的问题......代码如下:

do begin
declare lv_ww nvarchar(6);
declare lv_quarter nvarchar(6);

select "WORKWEEK","QUARTER" INTO lv_ww,lv_quarter from "ABC"."TABLE1";

select count(*) from "_SYS_BIC"."CID" (PLACEHOLDER."IP_SNAPSHOTWW" => :lv_ww,PLACEHOLDER."IP_QUARTER" => :lv_quarter);
end;

我在 select count(*) 行中遇到列存储错误、搜索表错误、计划运算符失败。所以基本上是内存不足问题,因为它占用了超过 15 GB 的内存。

现在我将硬编码 lv_ww = '202114' 和 lv_quarter = '2021Q2' 的值

do begin
declare lv_ww nvarchar(6) default '202114';
declare lv_quarter nvarchar(6) default '2021Q2';

select count(*) from "_SYS_BIC"."CID" (PLACEHOLDER."IP_SNAPSHOTWW" => :lv_ww,PLACEHOLDER."IP_QUARTER" => :lv_quarter);
end;

它运行得非常好,只需要 0.012 GB。

注意 - lv_ww 和 lv_quarter 在从 TABLE1 计算时完全没问题,并且给我们的值是 (lv_ww = 202114 and lv_quarter = 2021Q2)

如果您需要任何其他详细信息,请告诉我,并请告知我任何解决方案。

解决方法

与我给出的答案相同 here :

好吧,我想说一下:不同的执行时间/内存可能是由于不同的执行计划。并且由于语句之间的区别在于,在第一种情况下,选择的值在查询编译时是 NOT KNOWN,而在另一种情况下是 IS KNOWN,这可能是导致执行计划不同的原因。

您可能想检查一下这个理论!

解决此问题的一种方法是使用 BIND_AS_VALUE SQLScript 函数 (https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.05/en-US/0b2958ee0426496f9c084c92b14993f1.html)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...