将UUID值作为参数传递给函数

时间:2015-01-12 10:39:16

标签: postgresql uuid postgresql-9.3

我的表中包含一些列:

--table
create table testz
(
   ID uuid,
   name text
);

注意:我希望通过作为参数传递给函数来插入ID值。因为我正在生成ID值 在前端使用uuid_generate_v4()。所以我需要将生成的值传递给要插入的函数 进入表格

我的不好尝试:

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

1 个答案:

答案 0 :(得分:1)

你需要一个简单的演员来确保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语句更好的自动强制转换)。

SQLFiddle

如果您的功能如此简单,您也可以使用SQL functions

CREATE OR REPLACE FUNCTION testz(uuid, text) RETURNS VOID
LANGUAGE SQL AS 'INSERT INTO testz values($1, $2)';