ストアドプロシージャとUDF
複雑なロジックをカプセル化しCypherを拡張する、カスタムストアドプロシージャとユーザー定義関数を記述・デプロイする方法を学びます。
「ストアドプロシージャとUDF」はCoddyKit上の無料Neo4j Graph Database Fundamentalsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはNeo4j Graph Database Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Neo4j Graph Database Fundamentalsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Extending Neo4j's Capabilities
Welcome to extending Neo4j! Sometimes, Cypher isn't enough for complex logic or specific integrations. That's where custom code comes in.
Neo4j allows you to extend its functionality using Stored Procedures and User-Defined Functions (UDFs), typically written in Java.
- Stored Procedures perform actions, like creating nodes or running complex algorithms.
- User-Defined Functions (UDFs) return values, just like built-in Cypher functions.
They encapsulate complex logic, improve query readability, and boost performance for repetitive tasks.
Procedures vs. User-Defined Functions
It's crucial to understand the difference between procedures and UDFs:
- Stored Procedures:
- Called withCALL package.procedure()
- Can perform side effects (create, update, delete data)
- Return tabular results (rows and columns)
- Can access the graph database directly - User-Defined Functions (UDFs):
- Called within Cypher expressions (e.g.,RETURN my.udf(n.property))
- Must be pure functions (no side effects)
- Return a single scalar value (e.g., string, number, boolean, list)
- Cannot modify the graph or access it directly
Stored Procedure Anatomy (Java)
Stored procedures are Java classes compiled into a JAR file. They use specific Neo4j annotations.
Here's the basic structure for a simple procedure that doesn't take any parameters and returns a string:
package com.coddykit;
import org.neo4j.procedure.Procedure;
import org.neo4j.procedure.Name;
import org.neo4j.procedure.Description;
import org.neo4j.graphdb.Result;
import java.util.stream.Stream;
public class MyProcedures {
// Define the output record structure
public static class StringOutput {
public String value;
public StringOutput(String value) {
this.value = value;
}
}
@Procedure(value = "my.hello")
@Description("Returns a simple greeting.")
public Stream<StringOutput> hello() {
return Stream.of(new StringOutput("Hello from CoddyKit!"));
}
}Key Elements of a Procedure
Let's break down the previous code:
@Procedure(value = "my.hello"): This annotation declares a method as a stored procedure and defines its full name (my.hello).@Description: Provides a description visible in Neo4j Browser.- Output Class (
StringOutput): Procedures return aStreamof custom objects. Each object represents a row in the result, and its public fields become the column names. Stream<StringOutput>: The return type for procedures.
This Java code is ready to be compiled into a JAR and deployed.
Deploying Your Custom Procedure
To make your Java procedure available in Neo4j, you need to compile it and place the resulting JAR file into the database's plugins directory.
Steps:
- Compile your Java code into a JAR file (e.g.,
my-procedures.jar). - Copy the JAR file into your Neo4j installation's
pluginsfolder. - Restart your Neo4j database instance.
After restarting, Neo4j will discover and register your new procedures and functions.
Calling a Stored Procedure
Once deployed, you can call your procedure using the CALL keyword in Cypher. Let's try calling our my.hello procedure:
CALL my.hello();User-Defined Function (UDF) Anatomy
UDFs are similar to procedures but have different annotations and return types. They are designed to be used inline within Cypher expressions.
Here's the basic structure for a UDF that takes a string and returns a modified string:
package com.coddykit;
import org.neo4j.procedure.UserFunction;
import org.neo4j.procedure.Name;
import org.neo4j.procedure.Description;
public class MyFunctions {
@UserFunction("my.capitalize")
@Description("Capitalizes the first letter of an input string.")
public String capitalize(@Name("input") String input) {
if (input == null || input.isEmpty()) {
return input;
}
return Character.toUpperCase(input.charAt(0)) + input.substring(1);
}
}Key Elements of a UDF
Let's look at the UDF's components:
@UserFunction("my.capitalize"): This annotation declares a method as a UDF and defines its full name (my.capitalize).@Name("input"): Specifies the name for the parameter when used in Cypher.- Return Type: UDFs return a single scalar value (e.g.,
String,Long,Boolean,List<String>). They do not return aStreamor custom output objects.
Like procedures, this Java code must be compiled into a JAR and deployed to the plugins folder.
Calling a User-Defined Function
After deploying your UDF, you can use it directly within Cypher queries as part of an expression. It behaves just like built-in functions.
Let's use our my.capitalize UDF:
RETURN my.capitalize("hello world");
// Or with graph data:
MATCH (p:Person)
RETURN p.name, my.capitalize(p.name) AS CapitalizedName;Quick Check: Procedures & UDFs
Which of the following statements is TRUE regarding Neo4j Stored Procedures and User-Defined Functions (UDFs)?
Recap & Next Steps
You've learned how to extend Neo4j with custom Java code!
- Stored Procedures execute complex actions, return tabular results, and are called with
CALL. - User-Defined Functions (UDFs) return single scalar values, are pure functions (no side effects), and are used inline in Cypher expressions.
- Both require Java code, specific Neo4j annotations, compilation into a JAR, and deployment to the Neo4j
pluginsdirectory.
These powerful extensions allow you to integrate custom logic, algorithms, and external services directly into your Neo4j environment, significantly expanding its capabilities.
AI チューターと学ぶ Neo4j Graph Database Fundamentals — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「ストアドプロシージャとUDF」レッスンは無料ですか?
はい。「ストアドプロシージャとUDF」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Neo4j Graph Database Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Neo4j Graph Database Fundamentalsコースには全4レッスンが含まれています。
「ストアドプロシージャとUDF」で何を学びますか?
複雑なロジックをカプセル化しCypherを拡張する、カスタムストアドプロシージャとユーザー定義関数を記述・デプロイする方法を学びます。 ブラウザで直接実行するハンズオンコードでNeo4j Graph Database Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Neo4j Graph Database Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのNeo4j Graph Database Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ストアドプロシージャとUDF」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このNeo4j Graph Database Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのNeo4j Graph Database Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ストアドプロシージャとUDF
- BI・可視化ツールとの統合
- 高度なデータ取り込みパイプライン
- Neo4jの全文検索とベクトル検索