首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JCR:SQL2 2中获得子字符串?

如何在JCR:SQL2 2中获得子字符串?
EN

Stack Overflow用户
提问于 2018-09-22 00:28:01
回答 1查看 631关注 0票数 0

我正在试图解决的应用程序是:

查找/apps下所有组件的所有页面引用。 也就是说,首先查找正在使用组件的所有页面,然后对/apps下的所有组件执行此操作。

通过使用Adobe:https://adobe-consulting-services.github.io/acs-aem-commons/features/report-builder/configuring.html的报表生成器工具

我正在尝试的查询:

代码语言:javascript
复制
SELECT * FROM [nt:base] AS s 
WHERE [sling:resourceType] IN (SELECT path FROM [cq:Component] AS s WHERE [componentGroup] IS NOT NULL AND ISDESCENDANTNODE([/apps])) 
AND ISDESCENDANTNODE([/content])

背景:--我只需要清理内部查询中的结果集。如果不进行卫生处理,它将吐出表单/apps/acs-commons/components/utilities/report-builder/columns/text的路径,而吊索:外部查询中的资源类型只能接受acs-commons/components/utilities/report-builder/columns/text。因此,我需要从内部查询结果集路径中删除/apps/

这里是错误消息:

代码语言:javascript
复制
Caused by: java.text.ParseException: Query: SELECT * FROM [nt:base] AS s 
WHERE [sling:resourceType] IN (SELECT(*)CAST(path, AS STRING) FROM [cq:Component] AS s WHERE [componentGroup] IS NOT NULL AND ISDESCENDANTNODE([/apps])) 
AND ISDESCENDANTNODE([/content]); expected: static operand
EN

回答 1

Stack Overflow用户

发布于 2018-09-24 06:57:49

我认为您无法使用jcr sql2语法操作结果集,存储的procs通常用于操作类似于PL/SQL的结果集,而我在jcr文档中没有找到对此的任何引用。事实上,据我所知,jcr甚至不支持聚合函数,如MAX()COUNT()等。

要执行这个->,您可能需要先执行内部查询,以检索/apps中的所有组件,手动修改结果集(去掉/apps),然后将其提供给外部查询。

代码语言:javascript
复制
SELECT * FROM [nt:unstructured] AS comp
WHERE ISDESCENDANTNODE(comp, "/content/prj")
AND [sling:resourceType] IN ("prj/components/content/accordion","prj/components/content/breadcrumb")

要加快处理速度,可以使用像notepad++这样的文本编辑器,它可以帮助您进行块选择(ctrl + alt + shift,然后单击鼠标左键并拖动以选择)来删除/apps、添加开始/结束双引号、逗号和替换换行符字符,将其全部放在一行中并构造整个查询。

会有兴趣知道其他人是怎么想的,以及这是否可以用jcr sql2语法实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52452446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档