簡體   English   中英

MarkLogic Optic API from-sql 綁定參數

[英]MarkLogic Optic API from-sql binding parameters

我正在嘗試使用 from-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("$1", $client) => map:entry("$2", $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))

希望有所幫助,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM