列名作为参数

2020-09-10 11:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我试图从过程或函数生...

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

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


大家好,

我试图从过程或函数生成查询,该过程或函数希望列名是自定义表中用户设置的变量,然后从仅包含这些列的视图返回数据。 这是我所拥有的:

查看DHANA_MOVIERATES:

查看" DHANA_MOVIERATES"(
 " MOVIEID",
 "标题",
 " USERCOUNT",
 " AVGRATES"
 )作为选择t。" MOVIEID",t。" TITLE",count(a。" USERID")作为userCount,avg(a。" RATING")作为AVDHates从" DHANA_MOVIES"到内部连接" DHANA_RATINGS" a。  " MOVIEID" = t。" MOVIEID",按t。" MOVIEID",t。" TITLE"分组
 与只读

 

表DHANA_USERFIELDS:

列表" DHANA_USERFIELDS"(
 " USERNAME" varchar(180)不为null,
 " FIELDS" varchar(30)数组不为空,
 首要的关键(
 "用户名"
 )
 )
 卸载优先级5自动合并
 

一些USERFIELDS数据:

插入USERFIELDS值('xochilpili',array('MOVIEID','TITLE'); 

函数getCampos():

函数" DHANA_GETCAMPOS"()
     返回表(ex_fields nvarchar(1080))
     语言sqlscript sql
     安全调用者为
 开始
       从(SELECT * FROM UNNEST(DHANA_USERFIELDS.FIELDS)AS f(MEM))返回select string_agg(MEM,',')作为ex_fields;
 结束; 

测试getCampos函数:

从DHANA_GETCAMPOS()中选择*;

 输出:MOVIEID,TITLE 

要测试的匿名功能:


做(结果DHANA_MOVIERATES =>?)
 开始
      声明字段nvarchar(255):='';
      从DUMMY的字段中选择DHANA_GETCAMPOS();
      结果=选择:fields作为DHANA_MOVIERATES中的列;
 结束;

 错误:
 返回类型不匹配:RESULT [COLUMNS:NVARCHAR(255)]!=预期结果[MOVIEID:INT TITLE:VARCHAR(255)USERCOUNT:整数速率:小数(3,2)]:

 

我也尝试过:

从DHANA_MOVIERATES中选择(从DHANA_GETCAMPOS()中选择ex_fields);

/*但改为:*/

 电影标题
 电影标题
 [对于MOVIERATE视图中的每一行] 

我已经用许多不同的方法进行了测试,但是我无法获得预期的结果。

有人可以指出我正确的方向吗?

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

您的假设是SELECT语句可以解释存储在变量中的字段名称。 事实并非如此,在这种情况下,您需要动态SQL (具有所有缺点)。

另一个问题是您具有特定的结果类型。 查询必须提供结果结构中所有字段的值。 因此,如果您想这样做,则需要一个逻辑,该逻辑遍历结果结构的所有字段并为动态查询准备字段列表。 如果允许用户使用该字段,请将该字段添加到字段列表中,如果不允许该用户为各个字段设置null或初始值。 对于允许用户使用MOVIEID和TITLE字段的示例,您应该得到类似" ... MOVIEID,TITLE,null为USERCOUNT,null为RATES ...)。

能不能别闹
2楼-- · 2020-09-10 11:43

非常感谢!解决了:D

一周热门 更多>