HANA存储过程:动态输出表结构

2020-08-17 01:55发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨朋友, 我有一个要求,我希望...

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

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


嗨朋友,

我有一个要求,我希望根据存储过程中的列名将存储过程中具有不同列集的表OUTPUT传递给该过程。

举个例子,如果我将列名作为过程的输入传递,则只有那些列名应作为过程中的Table输出。 如果用户将col1,col2和col5用作输入参数,则输出表将只把col1,col2和col5作为表输出的一部分。

下一步,如果用户通过col1 .... col100,那么我的输出表将在表输出中包含所有col1 .... col100列。 输入的所有这些列都将来自UI。

从UI中选择的列将作为我的存储过程导入参数的输入。 我基于此创建了动态SQL查询,但是如何传递到输出容器,却陷入了那部分。

我尝试过使用表类型,但是它看起来是不可能的,因为我需要在运行时删除并创建相同的表类型,并且在同一过程的输出参数中也使用了相同的表类型,所以这给了我周期性的错误。

你们还有其他想办法吗? 请分享。

谢谢

Gaurav

HDB 2.0 SP3

2条回答
野沐沐
2020-08-17 02:30

您在此处采用的方法不会产生良好的结果。

SQL是一种静态语言,其中表和列(以及它们如何相互组合)是数据类型。 如果定义" CUSTOMER"表,则所有" CUSTOMER"类型的数据记录将共享相同的结构。

诸如动态SQL或HANA 2 SPS 4的ANY TABLE TYPE参数的添加不会更改此结构。

从用例的描述(最终用户在UI中选择列,程序将所选列的列表移交给DB)中,这里所需要做的就是

您可以轻松扩展此方法,使应用程序为用户选择创建多带带的SQL语句。 如果您愿意,可以进行一些优化并将其称为"查询引擎"。 但是,实际上,该应用程序已经"知道"用户输入到列选择和结果集结构的转换应该是什么样子。
所缺少的就是从中构建一个SQL命令,运行它并以正确的结构返回结果。

以这种方式进行操作可以清楚地区分查询处理的动态部分的结束位置,从而非常直观地了解客户端向数据库发送的查询(而不是费尽心思 选择协议转换成SQL),并发挥DB优化器的优势(即处理静态SQL)。

查看几乎所有允许用户选择要返回哪些列(又称为报告前端)的应用程序,您会发现它们全部都按照我的描述进行操作:他们构建了一个查询命令

这就是做到这一点的方法-不是动态SQL。

一周热门 更多>