【问题标题】:OrientDB - SQL command to pass array value as parameter in OrientDB functionOrientDB - 在 OrientDB 函数中将数组值作为参数传递的 SQL 命令
【发布时间】:2015-08-22 12:29:36
【问题描述】:

我在 orientdb 函数中有一个简单的 sql 查询,如下所示:

select * 
from TestExecutionPlanReport 
where executionPlan IN :executionPlans

它接受“executionPlans”作为应该传递数组值的参数。

当我只尝试像“#59:71”这样的一个值时,它会起作用并返回所需的输出。但是当我尝试传入像“[#59:71,#59:214]”这样的数组值时,它不起作用。它返回一个空响应。当我查询“select * from SomeClass where field IN [#59:71,#59:214]”时它起作用(不在 OrientDb 函数中)

【问题讨论】:

    标签: sql function parameters orientdb


    【解决方案1】:

    我在尝试从 Scala 代码运行 SQL 查询时遇到了同样的问题。我通过传递一个集合作为参数而不是列表或数组来解决它。

    【讨论】:

      【解决方案2】:

      如果我的问题是正确的,那么您正在尝试执行您在 OrientDB 服务器端函数(可能用 JavaScript 编写)中提到的查询,该函数将 executionPlan 作为参数。

      如果您使用参数化查询,我也注意到会发生这种情况。参数化查询类似于以下内容;

      var query = "select * from TestExecutionPlanReport where executionPlan IN ?"; return db.query(query, executionPlans);

      但是,当我使用字符串连接来构建查询时,它可以工作。我指的是下面的

      var query = "select * from TestExecutionPlanReport where executionPlan IN " + executionPlans

      如果您使用字符串连接,我认为问题在于您如何传递参数。与其传递 "[#59:71,#59:214]",不如尝试将 [#59:71,#59:214] 传递给您的函数,看看它是否有效。

      通常当您使用字符串连接构建查询时,您可以使用print() 函数在 OrientDB 控制台上打印连接查询。然而,基于连接的查询可以被利用来进行 SQL 注入,因此不鼓励。

      我无法解释为什么这不适用于参数化查询。我会对此做更多的研究。也许这是一个错误。我正在使用 OrientDB 2.0.3。

      希望这会有所帮助。

      【讨论】:

      • 不,我不想在 JAVASCRIPT 中执行。它在 SQL 中。这才是真正的问题。感谢您的光临
      • 您提到的内容也应该适用于 SQL。你的问题不清楚。
      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 2020-01-06
      • 2012-06-23
      相关资源
      最近更新 更多