没有与给定名称和参数类型匹配的过程,您可能需要添加显式类型强制转换,POSTGRESQL

taor4pac  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(147)

我为我的英语提前道歉。我是编程新手。PostgreSQL中的存储过程有一个问题。我有一张table:

CREATE TABLE user
(
   Id serial,
   idGroup INTEGER,
   firstname VARCHAR(45),
   lastname VARCHAR(45)
)

字符串
我想创建一个添加新用户的过程。过程本身已经创建,但我无法向其添加新用户。

CREATE PROCEDURE usernew
(
    c_Id INOUT INTEGER,
    c_idGroup INTEGER,
    c_firstname VARCHAR(45),
    c_lastname VARCHAR(45)
)

LANGUAGE 'plpgsql' AS
$$

BEGIN 
     INSERT INTO public.user (idGroup, firstname, lastname) values
     (c_idGroup,
          c_firstname,
          c_lastname
     ) RETURNING Id INTO c_Id;
END
$$;

call usernew(1, 'poppy', 'jacobs')


出现以下错误:

ERROR:  procedure usernew(integer, unknown, unknown) does not exist
LINE 1: call usernew(1, 'poppy', 'jacobs')
             ^
HINT:  No procedure matches the given name and argument types. You might need to add explicit type casts. 

SQL state: 42883
Character: 6


我试着用CAST(.. AS...),但这并没有帮助。
请帮帮我。提前感谢您的合作!

ddrv8njm

ddrv8njm1#

你只需要一个简单的SQL * 函数 *,而不是一个过程。在这里。

CREATE or replace function usernew(c_idGroup INTEGER, c_firstname text, c_lastname text)
returns integer LANGUAGE sql AS
$$
  INSERT INTO public.user (idGroup, firstname, lastname)
  VALUES (c_idGroup, c_firstname, c_lastname)
  RETURNING id;
$$;

字符串
像这样使用它

SELECT usernew (1, 'poppy', 'jacobs');


参见demo

相关问题