将 UUID 值作为参数传递给函数
Pass UUID value as a parameter to the function
我有 table 和一些列:
--table
create table testz
(
ID uuid,
name text
);
注意:我想通过作为参数传递给函数来插入 ID
值。因为我正在生成 ID
值
在前端使用 uuid_generate_v4()
。所以我需要将生成的值传递给要插入的函数
进入 table
我的失败尝试:
--function
CREATE OR REPLACE FUNCTION testz
(
p_id varchar(50),
p_name text
)
RETURNS VOID AS
$BODY$
BEGIN
INSERT INTO testz values(p_id,p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
--EXECUTE FUNCTION
SELECT testz('24f9aa53-e15c-4813-8ec3-ede1495e05f1','Abc');
出现错误:
ERROR: column "id" is of type uuid but expression is of type character varying
LINE 1: INSERT INTO testz values(p_id,p_name)
您需要一个简单的转换来确保 PostgreSQL 理解您要插入的内容:
INSERT INTO testz values(p_id::uuid, p_name); -- or: CAST(p_id AS uuid)
或者(最好)您需要一个具有确切参数类型的函数,例如:
CREATE OR REPLACE FUNCTION testz(p_id uuid, p_name text)
RETURNS VOID AS
$BODY$
BEGIN
INSERT INTO testz values(p_id, p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
因此,调用方可能需要进行强制转换(但 PostgreSQL 通常使用函数参数进行自动强制转换比在 INSERT
语句中进行更好)。
如果你的功能这么简单,你也可以使用 SQL
functions:
CREATE OR REPLACE FUNCTION testz(uuid, text) RETURNS VOID
LANGUAGE SQL AS 'INSERT INTO testz values(, )';
我有 table 和一些列:
--table
create table testz
(
ID uuid,
name text
);
注意:我想通过作为参数传递给函数来插入 ID
值。因为我正在生成 ID
值
在前端使用 uuid_generate_v4()
。所以我需要将生成的值传递给要插入的函数
进入 table
我的失败尝试:
--function
CREATE OR REPLACE FUNCTION testz
(
p_id varchar(50),
p_name text
)
RETURNS VOID AS
$BODY$
BEGIN
INSERT INTO testz values(p_id,p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
--EXECUTE FUNCTION
SELECT testz('24f9aa53-e15c-4813-8ec3-ede1495e05f1','Abc');
出现错误:
ERROR: column "id" is of type uuid but expression is of type character varying
LINE 1: INSERT INTO testz values(p_id,p_name)
您需要一个简单的转换来确保 PostgreSQL 理解您要插入的内容:
INSERT INTO testz values(p_id::uuid, p_name); -- or: CAST(p_id AS uuid)
或者(最好)您需要一个具有确切参数类型的函数,例如:
CREATE OR REPLACE FUNCTION testz(p_id uuid, p_name text)
RETURNS VOID AS
$BODY$
BEGIN
INSERT INTO testz values(p_id, p_name);
END;
$BODY$
LANGUAGE PLPGSQL;
因此,调用方可能需要进行强制转换(但 PostgreSQL 通常使用函数参数进行自动强制转换比在 INSERT
语句中进行更好)。
如果你的功能这么简单,你也可以使用 SQL
functions:
CREATE OR REPLACE FUNCTION testz(uuid, text) RETURNS VOID
LANGUAGE SQL AS 'INSERT INTO testz values(, )';