PostgreSQL:没有函数匹配给定的名称和参数类型

时间:2015-09-21 17:37:28

标签: sql postgresql plpgsql procedure

我有以下程序:

DROP FUNCTION presAdress();

CREATE FUNCTION presadress() RETURNS VARCHAR(100) AS $$
DECLARE studioName text;
    BEGIN

    RETURN (
    SELECT address AS pres_address
    FROM MovieExec
    WHERE cert# IN (
        SELECT presC# 
        FROM Studio
        WHERE name = studioName)
        );
    END;

$$ LANGUAGE plpgsql;

我尝试运行程序:

select presadress('Paramount');

但是我收到以下错误消息:

ERROR: function presadress(text) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 294

我怀疑这是因为关于程序的in参数存在某种错误,但我一直无法找到解决方案。

2 个答案:

答案 0 :(得分:0)

我想你想要一个更像这样的声明:

CREATE FUNCTION presadress (v_studioName text)
    RETURNS VARCHAR(100) AS $$
BEGIN
    RETURN(SELECT address AS pres_address
           FROM MovieExec
           WHERE cert# IN (SELECT presC# 
                           FROM Studio
                           WHERE name = v_studioName)
         );
END;
$$ LANGUAGE plpgsql;

答案 1 :(得分:0)

使用函数参数,如@Gordon演示,但您根本不需要plpgsql。查询可以简化(更短,更快):

CREATE FUNCTION presadress(_studioname text)
  RETURNS text AS
$$
SELECT m.address
FROM   studio s
JOIN   movieexec m ON m.cert# = s.presc#
WHERE  s.name = _studioname
$$ LANGUAGE sql STABLE;

功能波动可以是STABLE

相关: