-1

我写了以下函数:

-- 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_id它是sessions表的主键。

4

2 回答 2

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 个空行。

于 2015-06-27T18:40:48.020 回答
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;

希望能帮助到你。

于 2017-01-26T11:00:13.433 回答