Подготовленные операторы

Внутри подготовленных операторов Cypher может выполнять только запросы на чтение. При использовании параметров в хранимых процедурах SQL-параметр должен передаваться в вызов функции Cypher. Подробнее см. раздел Формат запросов Cypher.

Синтаксис параметров Cypher

Параметр Cypher имеет вид $, за которым следует идентификатор. В отличие от параметров PostgreSQL, параметры Cypher должны начинаться с буквы и могут быть дополнены любой буквенно-цифровой строкой.

Пример: $parameter_name

Подготовка оператора

Подготовка оператора Cypher является расширением системы хранимых процедур PostgreSQL. Для определения запроса, содержащего вызов функции Cypher, используйте команду PREPARE. Не используйте внутри строки запроса Cypher позиционные параметры PostgreSQL (например, $1). Вместо этого применяйте параметры Cypher (например, $name) в самом запросе Cypher, а соответствующий SQL-параметр передавайте третьим аргументом в функцию cypher().

PREPARE cypher_stored_procedure(agtype) AS
SELECT *
FROM cypher('expr', $$
    MATCH (v:Person)
    WHERE v.name = $name  // Параметр Cypher
    RETURN v
$$, $1)  // SQL-параметр должен передаваться как третий аргумент функции cypher()
AS (v agtype);

Выполнение подготовленного оператора

При выполнении подготовленного оператора укажите в качестве значения SQL-параметра agtype-карту с необходимыми значениями параметров — именно на том месте, где в вызове cypher() ожидается SQL-параметр. Значение должно быть корректной agtype-картой; в противном случае будет вызвана ошибка. Имена параметров в карте указываются без ведущего символа $.

EXECUTE cypher_stored_procedure('{"name": "Tobias"}');