MarkLogic Optic API from-sql 绑定参数
MarkLogic Optic API from-sql binding parameters
我正在尝试使用来自-sql 和 XQuery 的 Optic API。我发现这是获取所需数据的好方法,但我试图找到使用 op:from-sql.
将参数传递给占位符的明确示例
例如
let $result := op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=''IBM''
and department in (''IT'', ''ACCOUNTS'')
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result()
return $result
效果很好,得到了我期望的结果。
我需要什么来参数化,这样我就可以使用变量而不是文字。
我已经看到 op:param 但我怀疑它不用于指定占位符,如 ?在传统的 SQL 环境中。
例如,我知道是错误的;
let $client = "IBM
let $dept = ("IT", "ACCOUNT")
let $result := op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=?
and department in (?)
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result((), map:entry("", $client) => map:entry("", $dept))
return $result
那么有没有一个明确的例子可以说明我如何做到这一点?
谢谢,
斯蒂芬
在SQL字符串中使用@作为前缀是否有效?如:
op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=@client and department in (@department)
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result((),
map:entry("client", $client)
=> map:with("department", $dept))
另一种方法是使用 Optic 构建器方法来表达固定结构,并根据以下未经测试的草图对整个 SQL 条件进行参数化:
op:from-view('db', 'namevalue')
=> op:where(op:sql-condition(op:param("condition")))
=> op:group-by("name", op:sum("valueSum", "value"))
=> op:order-by(op:desc("valueSum"))
=> op:limit(30)
=> op:result((), map:entry("condition", $condition))
希望对您有所帮助,
我正在尝试使用来自-sql 和 XQuery 的 Optic API。我发现这是获取所需数据的好方法,但我试图找到使用 op:from-sql.
将参数传递给占位符的明确示例例如
let $result := op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=''IBM''
and department in (''IT'', ''ACCOUNTS'')
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result()
return $result
效果很好,得到了我期望的结果。
我需要什么来参数化,这样我就可以使用变量而不是文字。 我已经看到 op:param 但我怀疑它不用于指定占位符,如 ?在传统的 SQL 环境中。
例如,我知道是错误的;
let $client = "IBM
let $dept = ("IT", "ACCOUNT")
let $result := op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=?
and department in (?)
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result((), map:entry("", $client) => map:entry("", $dept))
return $result
那么有没有一个明确的例子可以说明我如何做到这一点?
谢谢,
斯蒂芬
在SQL字符串中使用@作为前缀是否有效?如:
op:from-sql('
SELECT name, sum(value)
FROM db.namevalue
WHERE client=@client and department in (@department)
GROUP BY name
ORDER BY 2 DESC
limit 30
')
=> op:result((),
map:entry("client", $client)
=> map:with("department", $dept))
另一种方法是使用 Optic 构建器方法来表达固定结构,并根据以下未经测试的草图对整个 SQL 条件进行参数化:
op:from-view('db', 'namevalue')
=> op:where(op:sql-condition(op:param("condition")))
=> op:group-by("name", op:sum("valueSum", "value"))
=> op:order-by(op:desc("valueSum"))
=> op:limit(30)
=> op:result((), map:entry("condition", $condition))
希望对您有所帮助,