The CALL clause is used to call a procedure deployed in the database.
The examples showing how to use arguments when invoking procedures all use the following procedure:
public class IndexingProcedure
{
@Context
public GraphDatabaseService db;
/**
* Adds a node to a named legacy index. Useful to, for instance, update
* a full-text index through cypher.
* @param indexName the name of the index in question
* @param nodeId id of the node to add to the index
* @param propKey property to index (value is read from the node)
*/
@Procedure
@PerformsWrites
public void addNodeToIndex( @Name("indexName") String indexName,
@Name("node") long nodeId,
@Name("propKey" ) String propKey )
{
Node node = db.getNodeById( nodeId );
db.index()
.forNodes( indexName )
.add( node, propKey, node.getProperty( propKey ) );
}
}
| Note This clause cannot be combined with other clauses. |
Call a procedure
This invokes the built-in procedure db.labels, which lists all in-use labels in the database.
Query
CALL db.labels
Result
| label |
|---|
| 2 rows |
|
|
Try this query live create (_0:`User`:`Administrator` {`name`:"Adrian"}) ; CALL db.labels
Call a procedure with literal arguments
This invokes the example procedure org.neo4j.procedure.example.addNodeToIndex using arguments that are written out directly in the statement text. This is called literal arguments.
Query
CALL org.neo4j.procedure.example.addNodeToIndex('users', 0, 'name')
Since our example procedure does not return any result, the result is empty.
Result
|
Try this query live create (_0:`User`:`Administrator` {`name`:"Adrian"}) ; CALL org.neo4j.procedure.example.addNodeToIndex('users', 0, 'name')
Call a procedure with parameter arguments
This invokes the example procedure org.neo4j.procedure.example.addNodeToIndex using parameters. The procedure arguments are satisfied by matching the parameter keys to the named procedure arguments.
Parameters
{
"indexName" : "users",
"node" : 0,
"propKey" : "name"
}
Query
CALL org.neo4j.procedure.example.addNodeToIndex
Since our example procedure does not return any result, the result is empty.
Result
|
Call a procedure with mixed literal and parameter arguments
This invokes the example procedure org.neo4j.procedure.example.addNodeToIndex using both literal and parameterized arguments.
Parameters
{
"node" : 0
}
Query
CALL org.neo4j.procedure.example.addNodeToIndex('users', { node }, 'name')
Since our example procedure does not return any result, the result is empty.
Result
|
Call a procedure within a complex query
This invokes the built-in procedure db.labels to count all in-use labels in the database
Query
CALL db.labels()YIELD label RETURN count(label) AS numLabels
Since the procedure call is part of a larger query, all outputs must be named explicitly
Result
| numLabels |
|---|
| 1 row |
|
Try this query live create (_0:`User`:`Administrator` {`name`:"Adrian"}) ; CALL db.labels() YIELD label RETURN count(label) AS numLabels
Call a procedure within a complex query and rename its outputs
This invokes the built-in procedure db.propertyKeys as part of counting the number of nodes per property key in-use in the database
Query
CALL db.propertyKeys()YIELD propertyKey AS prop MATCH (n) WHERE n[prop] IS NOT NULL RETURN prop, count(n) AS numNodes
Since the procedure call is part of a larger query, all outputs must be named explicitly
Result
| prop | numNodes |
|---|---|
| 1 row | |
|
|
Try this query live create (_0:`User`:`Administrator` {`name`:"Adrian"}) ; CALL db.propertyKeys() YIELD propertyKey AS prop MATCH (n) WHERE n[prop] IS NOT NULL RETURN prop, count(n) AS numNodes