问题是,在PostgreSQL中如何使用过程或函数插入到表中,其中输入参数是用户定义的数据类型?
在下面的代码中,当我们运行错误": error: relation"抛出。如何使用直接用户定义的数据类型来插入。
旁注:在stackoverflow中有很多使用UDT直接插入的例子,但是这里的问题是针对从存储过程或函数中插入的。
CREATE SCHEMA tooldb;
CREATE TYPE tooldb.point AS
(
firstpoint int,
lastpoint int
);
create table if not exists tooldb.points(
firstpoint int,
lastpoint int
);
CREATE OR REPLACE procedure tooldb.point_insert(
in_point tooldb.point
)
LANGUAGE plpgsql AS $$
BEGIN
insert into tooldb.points (firstpoint, lastpoint)
select firstpoint , lastpoint from in_point;
END $$;
call tooldb.point_insert((3,5));
过程调用失败
说
psql:commands.sql:24: ERROR: relation "in_point" does not exist
LINE 2: select firstpoint , lastpoint from in_point
不需要PL/pgSQL,纯SQL就足够了。
CREATE OR REPLACE procedure tooldb.point_insert(in_point tooldb.point)
language sql as
$$
insert into tooldb.points (firstpoint, lastpoint)
values (in_point.firstpoint, in_point.lastpoint);
$$;
要插入多行,您可以提供tooldb数组。作为过程参数的点:
CREATE OR REPLACE procedure tooldb.point_insert(in_point tooldb.point[])
language sql as
$$
insert into tooldb.points (firstpoint, lastpoint)
select el.firstpoint, el.lastpoint from unnest(in_point) as el;
$$;