Postgresql 错误:具有默认值的参数后面的输入参数在Postgres中也必须具有默认值
我试图将Postgresql 错误:具有默认值的参数后面的输入参数在Postgres中也必须具有默认值,postgresql,plpgsql,default-value,Postgresql,Plpgsql,Default Value,我试图将默认值设置为参数列表中函数中的变量,但出现错误: 错误:具有默认值的参数后面的输入参数也必须具有默认值 例子: 在你的例子中有很多不正确的地方。或者更确切地说:在你的例子中没有多少是正确的 CREATE OR REPLACE FUNCTION f_test( name text = NULL , city text = NULL , phonenumber text = NULL ,address text = NULL , OUT sno bigin
默认值设置为参数列表中函数中的变量,但出现错误:
错误:具有默认值的参数后面的输入参数也必须具有默认值
例子:
在你的例子中有很多不正确的地方。或者更确切地说:在你的例子中没有多少是正确的
CREATE OR REPLACE FUNCTION f_test(
name text = NULL
, city text = NULL
, phonenumber text = NULL
,address text = NULL
, OUT sno bigint)
RETURNS void AS
$func$
DECLARE
phonenumber AS VarChar(20); -- would collide with parameter name
BEGIN
phonenumber := phonenumber; -- nonsense
SELECT INTO sno max(ssno) + 1 FROM emp; -- SELECT INTO for assignment
IF sno IS NULL THEN
sno := ident_current('emp') + 1;
END IF;
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;
INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address);
END
$func$ LANGUAGE plpgsql;
试一试
请尝试为最后两个参数设置默认值,或更改参数顺序,使具有默认值的参数成为最后一个参数。@amenadiel,+1非常感谢。太棒了!终于排除了所有的错误。非常感谢。PostgreSQL中有Ident_current()函数吗?@Meem:没有,看起来像。
CREATE OR REPLACE FUNCTION f_test(
name text = NULL
, city text = NULL
, phonenumber text = NULL
,address text = NULL
, OUT sno bigint)
RETURNS void AS
$func$
DECLARE
phonenumber AS VarChar(20); -- would collide with parameter name
BEGIN
phonenumber := phonenumber; -- nonsense
SELECT INTO sno max(ssno) + 1 FROM emp; -- SELECT INTO for assignment
IF sno IS NULL THEN
sno := ident_current('emp') + 1;
END IF;
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;
INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address);
END
$func$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION f_test(
name text = NULL
, city text = NULL
, phonenumber text = NULL
, address text = NULL
, OUT sno bigint)
AS
$func$
BEGIN
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;
INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address)
RETURNING ssno
INTO sno; -- Assuming you want to return autoincremented id
END
$func$ LANGUAGE plpgsql;
Create or replace function test(
out sno bigint,
address varchar,
name varchar default null,
city varchar default null,
phonenumber varchar(20) default null)
returns void as ..