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()
表 1. 结果
answer

42

或者你也可以这样写

CALL apoc.custom.declareFunction('answerFunMap() :: MAP', 'RETURN 42 as answer')

在这种情况下,结果被包装在一个键为 answer、值为 42 的映射(map)中。因此,你可以执行

RETURN custom.answerFunMap() AS row
表 2. 结果
row

{ "answer": 42 }

如果你返回一个映射,可以选择将结果包装在另一个映射中,其中键为结果的名称,值为获取到的值。例如,声明此函数

CALL apoc.custom.declareFunction('answerFunMap(value:: INT) :: MAP', 'RETURN {a: $value}')

你可以执行

return custom.answerFunMap(2) as row
表 3. 结果
row
{
    "{a: $value}":
    {"a": 2}
  }

请注意,{"a": 2} 被一个键为 {a: $value} 的映射所包装,这正是从 RETURN {a: $value} 返回的列名。

相反,使用 MAPRESULT

CALL apoc.custom.declareFunction('answerFunMapResult(value:: INT) :: MAPRESULT', 'RETURN $value')

你可以执行

RETURN custom.answerFunMapResult(2) AS row
表 4. 结果
row
{"a": 2}

我们可以创建函数 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;
表 5. 结果

166

此外,我们可以传入第三个布尔参数(默认为 false)。如果设为 true,当函数返回单个元素的列表时,它将仅返回该单个元素本身,而不是列表。

例如:

CALL apoc.custom.declareFunction('forceSingleTrue(input::ANY) :: LIST OF INT',
  'RETURN 1',
  true
);
表 6. 结果

1

否则,若为 false,结果将是一个单元素列表

CALL apoc.custom.declareFunction('forceSingleFalse(input::ANY) :: LIST OF INT',
  'RETURN 1',
  false
);
表 7. 结果

[1]

此外,我们可以传入一个 description 参数作为第四个参数,该描述将通过 call apoc.custom.listSHOW FUNCTIONS 返回。

© . This site is unofficial and not affiliated with Neo4j, Inc.