PostgreSQL:CREATE FUNCTION按主键返回一行

时间:2015-06-27 15:56:48

标签: postgresql return create-function

我写了以下函数:

-- Authenticate: Get session_id with user_id
CREATE OR REPLACE FUNCTION sessions_get(bigint) RETURNS SETOF char(32) AS
$$
    SELECT strip_hyphens(id) as id FROM sessions WHERE user_id = $1;
$$
LANGUAGE SQL;
  1. 我希望能够运行查询SELECT sessions_get(1)以获取具有用户ID 1的会话ID。并且,我希望返回的列的名称为id

    这可能吗?或者,查询必须是SELECT * FROM sessions_get(1)吗?在这种情况下,只需编写SELECT sessions_get(1) as id就可以了。哪个更好?

  2. 我可以删除SETOF,因为我知道此函数将始终返回0或1行吗?我知道这是因为user_idsessions表的主键。

2 个答案:

答案 0 :(得分:0)

  1. 将功能更改为:

    -- Authenticate: Get session_id with user_id
    CREATE FUNCTION sessions_get(bigint, OUT id char(32)) RETURNS SETOF char(32) AS
    $$
        SELECT strip_hyphens(id) FROM sessions WHERE user_id = $1;
    $$
    LANGUAGE SQL;
    

    然后,使用查询:SELECT * FROM sessions_get(1)

  2. 使用SETOF,以便在不存在时返回0行。否则,您将获得1个空行。

答案 1 :(得分:0)

为避免返回SETOF,您可以随时执行此操作:

CREATE OR REPLACE FUNCTION sessions_get(IN a bigint, OUT id char(32)) RETURNS char(32) AS
$$
    SELECT strip_hyphens(id) INTO id FROM sessions WHERE user_id = $1;
    RETURN;
$$
LANGUAGE SQL;

希望它有所帮助。