apoc.custom.declareProcedure
存储过程 Apoc Extended 已弃用
apoc.custom.declareProcedure(signature, statement, mode, description) - 注册一个自定义 Cypher 过程
签名
apoc.custom.declareProcedure(signature :: STRING?, statement :: STRING?, mode = read :: STRING?, description = :: STRING?) :: VOID
|
此过程不适用于集群环境,使用时可能会出现不可预期的行为。 |
使用示例
这是一个简单的示例
CALL apoc.custom.declareProcedure('answerInteger() :: (row::INT)', 'RETURN 42 as answer')
这会将该语句注册为过程 custom.answer,随后您可以对其进行调用。
CALL custom.answerInteger
| answer |
|---|
42 |
或者你也可以这样写
CALL apoc.custom.declareProcedure('answer() :: (row::MAP)', 'RETURN 42 as answer')
在这种情况下,结果被封装在一个名为 row 的映射流中。因此,您可以执行以下操作
CALL custom.answer() YIELD row
RETURN row.answer
| answer |
|---|
42 |
我们可以创建函数 custom.powers,它返回第一个参数的幂流,直到并包括第二个参数提供的幂次
CALL apoc.custom.declareProcedure(
'powers(input::INT, power::INT) :: (answer::INT)',
'UNWIND range(0, $power) AS power
RETURN $input ^ power AS answer'
);
| 过程、输入和输出名称必须至少包含 2 个字符。 |
我们可以使用此函数来返回 4°、4¹、4² 和 4³,如下面的查询所示
call custom.powers(4,3);
| answer |
|---|
1.0 |
4.0 |
16.0 |
64.0 |
此外,我们可以传递第三个参数作为字符串来指定过程模式(默认为 "WRITE")。它可以是: - "READ" - 如果过程仅对图执行读取操作 - "WRITE" - 如果过程可以对图执行读写操作 - "SCHEMA" - 如果过程将对模式(Schema)执行操作 - "DBMS" - 如果过程将执行系统级操作(即非针对图的操作)
此外,我们可以将 description 作为第四个参数传递,该描述将由 call apoc.custom.list 和 SHOW PROCEDURES 返回。