HANA过程:SAP DBTech JDBC:[2]:一般错误:qp_expr_subquery

2020-09-10 08:32发布

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

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


步骤" SCHEMA_NAME"。" AAA :: ZCO_BACKJOBS"()
 语言SQLSCRIPT
 SQL安全调用程序
 DEFAULT SCHEMA SCHEMA_NAME
 -读取SQL数据
 如
 开始
/*********************************
 编写过程逻辑
  ********************************/
  调用" SCHEMA_NAME"。" public :: ZYY_WRITEDATA"((从" _SYS_BI"中选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))。" M_FISCAL_CALENDAR"
 其中date_SQL = add_days(CURRENT_DATE,-60)和calendar_variant ='V3'),
  (从" _SYS_BI"中选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))。" M_FISCAL_CALENDAR"
 其中date_SQL = CURRENT_DATE和calendar_variant ='V3'));
 
  呼叫" SCHEMA_NAME"。" public :: ZXX_WRITEDATA"((从虚拟对象中选择to_dats(add_days(CURRENT_DATE,-60))),
  (从哑元中选择to_dats(CURRENT_DATE)));
 
 结束;


 

HI

我创建了要在后台安排的程序; 其中包含2个将数据写入表的过程。

在SQL控制台中执行此过程语句时,将产生错误,如SAP DBTech JDBC:[2]:一般错误:qp_expr_subquery。

此过程中的这两个SQL语句均已在SQL控制台中成功执行。

我已经检查了索引服务器跟踪,但是发现没有帮助。 请指教。

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

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


步骤" SCHEMA_NAME"。" AAA :: ZCO_BACKJOBS"()
 语言SQLSCRIPT
 SQL安全调用程序
 DEFAULT SCHEMA SCHEMA_NAME
 -读取SQL数据
 如
 开始
/*********************************
 编写过程逻辑
  ********************************/
  调用" SCHEMA_NAME"。" public :: ZYY_WRITEDATA"((从" _SYS_BI"中选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))。" M_FISCAL_CALENDAR"
 其中date_SQL = add_days(CURRENT_DATE,-60)和calendar_variant ='V3'),
  (从" _SYS_BI"中选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))。" M_FISCAL_CALENDAR"
 其中date_SQL = CURRENT_DATE和calendar_variant ='V3'));
 
  呼叫" SCHEMA_NAME"。" public :: ZXX_WRITEDATA"((从虚拟对象中选择to_dats(add_days(CURRENT_DATE,-60))),
  (从哑元中选择to_dats(CURRENT_DATE)));
 
 结束;


 

HI

我创建了要在后台安排的程序; 其中包含2个将数据写入表的过程。

在SQL控制台中执行此过程语句时,将产生错误,如SAP DBTech JDBC:[2]:一般错误:qp_expr_subquery。

此过程中的这两个SQL语句均已在SQL控制台中成功执行。

我已经检查了索引服务器跟踪,但是发现没有帮助。 请指教。

付费偷看设置
发送
2条回答
SKY徐
1楼 · 2020-09-10 09:00.采纳回答

塞尔吉奥就在这里!

不要将SQL查询文本作为过程调用的参数。

相反,将它们分配给表变量并将变量用作参数。

过程" SCHEMA_NAME"。" AAA :: ZCO_BACKJOBS"()
 语言SQLSCRIPT
 SQL安全调用程序
 DEFAULT SCHEMA SCHEMA_NAME
 如
 开始

 tab_A =选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))
         来自" _SYS_BI"。" M_FISCAL_CALENDAR"
         哪里
         date_SQL = add_days(CURRENT_DATE,-60)
         和calendar_variant ='V3');

 tab_B =选择concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))
         来自" _SYS_BI"。" M_FISCAL_CALENDAR"
         哪里
         date_SQL = CURRENT_DATE
         和calendar_variant ='V3';

 呼叫" SCHEMA_NAME"。" public :: ZYY_WRITEDATA"(:tab_A,:tab_B);
 
 tab_C =从哑元中选择to_dats(add_days(CURRENT_DATE,-60));
 tab_D =从虚拟对象中选择to_dats(CURRENT_DATE);

 呼叫" SCHEMA_NAME"。" public :: ZXX_WRITEDATA"(:tab_C,:tab_D);
 
 结束;

 

通过这样重写代码,也很容易发现废话:

-所有查询有效地寻找单个值而不是元组

< p>-对于tab_C和tab_D,不需要任何SELECT查询-这是一个简单的公式求值。

因此,整个过程都可以重写为:

过程" SCHEMA_NAME"。  " AAA :: ZCO_BACKJOBS"()
 语言SQLSCRIPT
 SQL安全调用程序
 DEFAULT SCHEMA SCHEMA_NAME
 如
 开始
 DECLARE fiscYearPeriodA NVARCHAR(7);
 DECLARE fiscYearPeriodB NVARCHAR(7);
 宣告今天DAT NVARCHAR(8);
 声明twoMonthPastDATS NVARCHAR(8);

        选择
             concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))
             进入fiscYearPeriodA
         来自" _SYS_BI"。" M_FISCAL_CALENDAR"
         哪里
         date_SQL = add_days(CURRENT_DATE,-60)
         和calendar_variant ='V3';

         选择
             concat(FISCAL_YEAR,lpad(FISCAL_PERIOD,3,0))
             进入fiscYearPeriodB
         来自" _SYS_BI"。" M_FISCAL_CALENDAR"
         哪里
         date_SQL = CURRENT_DATE
         和calendar_variant ='V3';


 todayDATS:= to_dats(add_days(CURRENT_DATE,-60));
 twoMonthPastDATS:= to_dats(CURRENT_DATE);

 呼叫" SCHEMA_NAME"。" public :: ZYY_WRITEDATA"
                    (:fiscYearPeriodA,:fiscYearPeriodB);
 
 呼叫" SCHEMA_NAME"。" public :: ZXX_WRITEDATA"
                    (:todayDATS,:twoMonthPastDATS);
 
 END; 

以此,您至少可以关注此过程的逻辑是否有意义。

歪着头看世界
2楼-- · 2020-09-10 08:45

似乎在此存储的proc中调用子proc时没有正确的输入参数。 尝试在将表类型定义为变量之前,将它们作为输入参数传递...然后在子存储的proc调用中执行以下操作:

call (var_tt,var_tt2 ...); -对于您的每个孩子proc调用

一周热门 更多>