点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我需要一个具有表功能/UDF和三个公司代码IP参数的计算视图:
IP_BUKR_FROM和IP_BUKR_TO作为阵列和
IP_BUKRS_MUL作为可供选择的参数。
查询
选择* 来自" MYSCHEMA。" MYFUNCTION"('201811','0','9999','363; 364')
工作正常,
选择* FROM" _SYS_BIC"。" REWE.ZFI.BIBER.MABU-BIBER :: ZFIMB_UDFENRICH_ABTBUMO18B"('201811','100','200','')
给我这个错误信息
在24.169秒内无法执行" SELECT * FROM ..."。 SAP DBTech JDBC:[305]:单行查询返回多行:搜索表错误:" MYSCHEMA"。" MYFUNCTION":第25行第1行(在pos 732):[305](范围3)单行 查询返回多行异常:单行查询返回多行:ptime :: PtimeException(请检查行:25)
如果我跳过选择选项的两个参数(从到),而只在代码中保留参数IP_BUKRS_MUL,则可以使用相同的UDF。
这是我的UDF:
功能" MYSCHEMA"。" MYFUNCTION" (IP_BUCHUNGSPERIODE VARCHAR(6), IP_BUKR_FROM VARCHAR(4), IP_BUKR_TO VARCHAR(4), IP_BUKRS_MUL VARCHAR(5000)) 退货表( R_BUCHUNGSPERIODE VARCHAR(6), R_FISCVARNT VARCHAR(2), R_SAP_KOSTENSTELLE NVARCHAR(10), R_CO_AREA NVARCHAR(4), R_BUKR VARCHAR(4), RK_AMOUNT DECIMAL(15,5)) 语言SQLSCRIPT SQL安全调用程序 默认模式 如 开始 DECLARE BUKRS_FIL VARCHAR(5000):='BUKR in('||:IP_BUKRS_MUL ||')'; 如果(IP_BUKR_FROM为NULL并且 IP_BUKR_TO为NULL) 然后 IP_BUKR_FROM ='0'; IP_BUKR_TO ='9999'; 万一; var_sel = 选择 紫uch 作为BUCHUNGSPERIODE ," K4"为FISCVARNT ,SAP_KOSTENSTELLE_ 如SAP_KOSTENSTELLE ,CO_AREA ,BUKR ,金额 金额 来自" OTHERSCHEMA"。" MYTABLE" 哪里 Buchungsperiode =:IP_BUCHUNGSPERIODE AND BUKR> =:IP_BUKR_FROM AND BUKR <=:IP_BUKR_TO ; IF(IP_BUKR_FROM ='0'或 IP_BUKR_TO ='9999') 然后 var_in = APPLY_FILTER(:var_sel,:BUKRS_FIL); 其他 var_in = SELECT * FROM:var_sel; 万一; 返回选择 BUCHUNGSPERIODE AS R_BUCHUNGSPERIODE, FISCPER AS R_FISCPER, FISCVARNT AS R_FISCVARNT, SAP_KOSTENSTELLE AS R_SAP_KOSTENSTELLE, CO_AREA AS R_CO_AREA, LPAD(BUKR,4,'000')AS R_BUKR, AMOUNT AS RK_AMOUNT 来自:var_in; 结束;
有没有所有三个参数都能正常工作的解决方案?
最诚挚的问候,马丁
嗨马丁
,该问题很可能是由您在该计算视图中所做的事情和要获取的数据共同引起的。
对于错误 发生这种情况时,视图的某些部分期望最多只能返回1条记录。
类似
就可以正常工作。
只要您的过滤器允许输入的条目可以返回多个 条目,您将看到现在遇到的错误。
一种常见的处理方法是确保返回的记录不超过一个。 此处可以使用聚合函数(例如MAX/MIN)。
产生这种错误的另一种方法是在SQLScript中进行如下操作:
在这里,适用与以前相同的解释。
简而言之:此错误不是由于使用UDF或计算视图(或任何其他视图) 开发工件类型),但由于您对数据(-模型)有误解。
干杯,
Lars
" OTHERSCHEMA"。" MYTABLE"确实是普通表,或者可能是具有自己的过滤器/选择条件的视图?
关于此问题,我想补充一点:非常令人困惑的错误 当结果集很大时,还会出现消息"单行查询返回多个行"-在上述给定的解决方案中,例如 当我选择许多公司代码时 经过大量的反思和尝试,直到我意识到我的代码现在是正确的,我只需要选择较小范围的公司代码...
Lars,您是对的 -标识符MYTABLE是一个令人误解的标识符:它是另一个具有更复杂的转换和选择的计算视图...真正令人困惑的事实是,该表函数可以作为例程正常工作(没有返回表)-也在调试器中。
我应该尝试在该UDF中执行所有选择吗?
这是解决方案,再次感谢! 我刚刚添加了一个INNER JOIN,整个脚本现在看起来像这样:
那将是一个错误。
该错误消息是关于定性错误(多个结果记录而不是唯一的记录),而不是定量一个(一些,更多,很多或太多)记录
如果错误出现在选择范围较广而不是选择范围较窄的位置,则该选择范围内遗漏的记录必须包含导致问题的数据。
一周热门 更多>