Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:没有与给定名称和参数类型匹配的函数_Sql_Postgresql_Plpgsql_Procedure - Fatal编程技术网

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

PostgreSQL:没有与给定名称和参数类型匹配的函数,sql,postgresql,plpgsql,procedure,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# FR

我有以下程序:

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');
我尝试运行以下过程:

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参数存在某种错误,但我无法找到解决方案。

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

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;

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

函数波动性可以是稳定的

相关的:


您已将函数声明为不带参数。因此,当你传递一个参数时,函数没有定义。那么我该如何重新格式化它以接受任意长度的字符串呢?我以为这是在“声明研究名称文本”中完成的线路。