Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 错误:具有默认值的参数后面的输入参数在Postgres中也必须具有默认值_Postgresql_Plpgsql_Default Value - Fatal编程技术网

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 ..