该CALL
子句用于调用数据库中procedure。
介绍
使用该子句来调用程序CALL
。
此 |
每个过程调用都需要指定所有必需的过程参数。这可以通过在过程名称后使用括号括起来的逗号分隔列表显式地完成,也可以通过使用可用的查询参数作为过程调用参数隐式地完成。后一种形式仅在所谓的独立过程调用中可用,此时整个查询由单个CALL
子句组成。
大多数过程都会返回具有一组固定结果字段的记录流,类似于运行 Cypher ®查询返回记录流的方式。YIELD
子句用于明确选择将哪些可用结果字段作为新绑定的变量从过程调用返回给用户或供其余查询进一步处理。因此,为了能够用于YIELD
显式列,需要提前知道输出参数的名称(和类型)。每个产生的结果字段都可以选择使用别名重命名(即)resultFieldName AS newName
。过程调用绑定的所有新变量都将添加到当前范围中已绑定的变量集中。如果过程调用试图重新绑定先前绑定的变量(即,过程调用不能隐藏当前范围中先前绑定的变量),则会出错。在独立过程调用中,YIELD *
可用于选择所有列。在这种情况下,不需要提前知道输出参数的名称。
有关如何确定CALL
过程的输入参数和过程的输出参数的更多信息YIELD
,请参阅查看过程的签名。
在较大的查询中,具有显式的过程调用返回的记录YIELD
可以使用WHERE
后跟谓词的子句进行进一步过滤(类似于WITH ... WHERE ...
)。
如果被调用过程声明了至少一个结果字段,YIELD
则通常不能省略。但是YIELD
在独立过程调用中始终可以省略。在这种情况下,所有结果字段都作为从过程调用到用户的新绑定变量产生。
Neo4j 支持过程的概念VOID
。VOID
过程是一种不声明任何结果字段且不返回结果记录的过程,并且已明确声明为VOID
。调用VOID
过程可能只会产生副作用,因此既不允许也不需要使用YIELD
。VOID
在较大的查询中间调用过程只会传递每个输入记录(即,它就像WITH *
记录流一样)。
Neo4j 附带许多内置程序。有关这些程序的列表,请参阅操作手册 → 程序。 用户还可以开发自定义过程并部署到数据库。有关详细信息,请参阅Java 参考 → 用户定义过程。 |