1、定義
APOC提供相關過程來創建用戶自定義的函數和過程。這些函數和過程實際上是參數化的Cypher語言查詢,類似宏(Macro)的概念。相關過程如下:
- apoc.custom.asFunction(),創建用戶自定義函數;
- apoc.custom.asProcedure(),創建用戶自定義過程。
用戶自定義函數和過程可以通過CALL dbms.functions和CALL dbms.procedures查看,所有自定義函數和過程自動被加上custom爲前綴,例如custom.MyProcedure。
2、調用接口
CALL apoc.custom.asProcedure(
name,
statement,
mode,
outputs,
inputs,
description
)
CALL apoc.custom.asProcedure(
name,
statement,
mode,
outputs,
inputs,
description
)
參數名 |
類型 |
默認值 |
可爲空? |
說明 |
name |
字符串 |
無 |
否 |
過程或函數名 |
statement |
字符串 |
無 |
否 |
過程或函數包含的Cypher查詢 |
mode |
字符串 |
'read' |
是 |
查詢執行模式,取值'read'或'write' |
outputs |
名稱-類型對的數組 |
無 |
是 |
輸出字段及其類型,格式如下: ] 合法的類型值參見下面的表格 |
inputs |
名稱-類型對的數組 |
無 |
是 |
輸入參數及其類型,格式如下: ] 合法的類型值參見下面的表格 |
description |
字符串 |
無 |
是 |
函數/過程的描述內容 |
3、示例
// (1) 創建用戶自定義過程:搜索祖孫關係。
// 參數:- 過程名: findGrandParents
// - statement: 搜索2度“父子”關係
// - mode: READ / 只讀
// - 輸出結果: grandparent/節點, grandson/節點
// - 輸入參數: name/人物姓名
CALL apoc.custom.asProcedure(
'findGrandParents',
'MATCH (n) <-[父子*2]- (m:人物{name:$name}) RETURN n AS grandParent, m AS grandSon',
'read',
[['grandParent','NODE'],['grandSon','NODE']],
[['name','STRING']]
)
// (2) 調用用戶自定義過程:搜索司馬炎的祖孫關係。
CALL custom.findGrandParents('司馬炎')
YIELD grandParent, grandson
RETURN *