postgresql 在apache-age中创建自定义函数?

owfi6suc  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(3)|浏览(152)

如何在apache-age中创建自定义函数,类似于我们可以使用PostgreSQL语句创建的函数;

CREATE FUNCTION f2(INTEGER) returns INTEGER AS 'SELECT \$1' LANGUAGE SQL;

我需要创建一个函数,就像上面在PostgreSQL中创建的函数一样。函数的输入应为整数,输出也应为整数。

ct2axkht

ct2axkht1#

在Apache-AGE中,你可以像在PostgreSQL中一样创建自定义函数。
为此,您需要使用“CREATE FUNCTION”子句。一个简单的函数接受INTEGER并返回INTEGER的例子如下:

CREATE FUNCTION find_square(i INTEGER) RETURNS INTEGER AS $$
SELECT i * i;
$$ LANGUAGE SQL;

此函数接受INTERGER并返回其平方。所有的函数计算都在“SELECT”语句之后进行。例如,如果你想在找到它的平方后减去i,那么你将把它修改为:

CREATE FUNCTION find_square_subtract_i(i INTEGER) RETURNS INTEGER AS $$
SELECT (i * i) - i;
$$ LANGUAGE SQL;
7tofc5zh

7tofc5zh2#

Apache AGE支持PostgreSQL,因此我们可以使用与PostgreSQL相同的语法在Apache Age中创建自定义函数。
要创建自定义函数,我们使用CREATE语句。

CREATE FUNCTION
function_name(argument_1 data_type, argument_2 data_type, ...)
RETURNS return_data_type AS $$
BEGIN
-- function body
END; $$
LANGUAGE language;

示例:两个整数相乘的函数:

CREATE FUNCTION mul(a
integer, b integer)
RETURNS integer AS $$
BEGIN
RETURN a * b;
END; $$
LANGUAGE plpgsql;

一旦创建了函数,我们就可以在SQL语句中使用它。

SELECT mul(5, 15);
xytpbqjk

xytpbqjk3#

我找到了答案:
要使用age-query创建自定义函数,我们可以使用以下语法:

CREATE OR REPLACE FUNCTION get_actors_who_played_role(role agtype)
RETURNS TABLE(actor agtype, movie agtype)
LANGUAGE plpgsql
AS $function$
DECLARE sql VARCHAR;
BEGIN
        load 'age';
        SET search_path TO ag_catalog;

        sql := format('
        SELECT *
        FROM cypher(''imdb'', $$
            MATCH (actor)-[:acted_in {role: %s}]->(movie:movie)
            RETURN actor.name, movie.title
        $$) AS (actor agtype, movie agtype);
    ', role);

        RETURN QUERY EXECUTE sql;

END
$function$;

参考文件:https://age.apache.org/age-manual/master/advanced/plpgsql.html

相关问题