apoc.custom.declareFunction
存储过程 Apoc Extended 已弃用
apoc.custom.declareFunction(signature, statement, forceSingle, description) - 注册一个自定义 Cypher 函数
签名
apoc.custom.declareFunction(signature :: STRING?, statement :: STRING?, forceSingle = false :: BOOLEAN?, description = :: STRING?) :: VOID
|
此过程不适用于集群环境,使用时可能会出现不可预期的行为。 |
输入参数
| 名称 | 类型 | 默认 |
|---|---|---|
签名 |
STRING? |
null |
statement |
STRING? |
null |
forceSingle(强制单个返回) |
布尔值? |
false |
description(描述) |
STRING? |
使用示例
这是一个简单的示例
CALL apoc.custom.declareFunction('answerFun() :: INT', 'RETURN 42 as answer')
这会将语句注册为名为 custom.answer 的过程,之后即可调用它。
RETURN custom.answerFun()
| answer |
|---|
42 |
或者你也可以这样写
CALL apoc.custom.declareFunction('answerFunMap() :: MAP', 'RETURN 42 as answer')
在这种情况下,结果被包装在一个键为 answer、值为 42 的映射(map)中。因此,你可以执行
RETURN custom.answerFunMap() AS row
| row |
|---|
{ "answer": 42 } |
如果你返回一个映射,可以选择将结果包装在另一个映射中,其中键为结果的名称,值为获取到的值。例如,声明此函数
CALL apoc.custom.declareFunction('answerFunMap(value:: INT) :: MAP', 'RETURN {a: $value}')
你可以执行
return custom.answerFunMap(2) as row
| row |
|---|
|
请注意,{"a": 2} 被一个键为 {a: $value} 的映射所包装,这正是从 RETURN {a: $value} 返回的列名。
相反,使用 MAPRESULT
CALL apoc.custom.declareFunction('answerFunMapResult(value:: INT) :: MAPRESULT', 'RETURN $value')
你可以执行
RETURN custom.answerFunMapResult(2) AS row
| row |
|---|
|
我们可以创建函数 custom.powers,它返回第一个参数的幂流,直到并包含第二个参数所提供的幂次
CALL apoc.custom.declareProcedure(
'powers(input::INT, power::INT) :: (answer::INT)',
'UNWIND range(0, $power) AS power
RETURN $input ^ power AS answer'
);
我们可以通过运行以下函数来创建 custom.double 函数,用于将提供的值加倍
CALL apoc.custom.declareFunction(
'double(input::INT) :: INT',
'RETURN $input*2 as answer'
);
| 函数、输入和输出名称必须至少包含 2 个字符。 |
我们可以使用此函数,如下面的查询所示
RETURN custom.double(83) AS value;
| 值 |
|---|
166 |
此外,我们可以传入第三个布尔参数(默认为 false)。如果设为 true,当函数返回单个元素的列表时,它将仅返回该单个元素本身,而不是列表。
例如:
CALL apoc.custom.declareFunction('forceSingleTrue(input::ANY) :: LIST OF INT',
'RETURN 1',
true
);
| 值 |
|---|
1 |
否则,若为 false,结果将是一个单元素列表
CALL apoc.custom.declareFunction('forceSingleFalse(input::ANY) :: LIST OF INT',
'RETURN 1',
false
);
| 值 |
|---|
[1] |
此外,我们可以传入一个 description 参数作为第四个参数,该描述将通过 call apoc.custom.list 和 SHOW FUNCTIONS 返回。