在 Postgres 存储过程中传递 table 值参数
Passing table valued parameter in Postgres stored procedure
我应该将存储过程从 SQL 服务器迁移到 Postgres。
这是 SQL 服务器中的程序代码:
ALTER proc [dbo].[_GetUsers]
(
@tblUsersSelected typParameter READONLY
)
as
SELECT
Users.*
FROM
Users
JOIN
@tblUsersSelected UsersSelected
ON
Users.iUserID = UsersSelected.IntValue;
我试图在 Postgres 中实现类似于 "table valued parameter" 的东西,但失败了。有人可以帮忙吗?
使用 integer
的数组:
CREATE FUNCTION getusers(p_userids integer[]) RETURNS SETOF users
LANGUAGE sql AS
'SELECT * FROM users WHERE iuserid = ANY (p_userids)';
将其创建为 postgres 函数,然后将其简单地加入到您的 table 数据中。
这是一个例子:
CREATE TEMPORARY TABLE _users
(
user_id serial
, user_name varchar
);
INSERT INTO _users
(user_name)
VALUES
('aaa')
,('beb')
,('caa')
,('fff');
CREATE FUNCTION pg_temp._test_table_values (_user_id int)
RETURNS TABLE
(
user_id int
,user_name varchar
)
SECURITY DEFINER AS $$
SELECT user_id, user_name
FROM _users
WHERE user_name LIKE '%a%'
AND user_id = _user_id;
$$ LANGUAGE SQL;
--join table and function
SELECT val.*
FROM _users AS u
JOIN pg_temp._test_table_values(u.user_id) AS val (user_id, user_name)
ON u.user_id = val.user_id;
当我从 SQL 服务器迁移到 PostgreSQL 时,我花了一段时间才习惯使用函数来处理所有事情,祝你好运!
我应该将存储过程从 SQL 服务器迁移到 Postgres。
这是 SQL 服务器中的程序代码:
ALTER proc [dbo].[_GetUsers]
(
@tblUsersSelected typParameter READONLY
)
as
SELECT
Users.*
FROM
Users
JOIN
@tblUsersSelected UsersSelected
ON
Users.iUserID = UsersSelected.IntValue;
我试图在 Postgres 中实现类似于 "table valued parameter" 的东西,但失败了。有人可以帮忙吗?
使用 integer
的数组:
CREATE FUNCTION getusers(p_userids integer[]) RETURNS SETOF users
LANGUAGE sql AS
'SELECT * FROM users WHERE iuserid = ANY (p_userids)';
将其创建为 postgres 函数,然后将其简单地加入到您的 table 数据中。
这是一个例子:
CREATE TEMPORARY TABLE _users
(
user_id serial
, user_name varchar
);
INSERT INTO _users
(user_name)
VALUES
('aaa')
,('beb')
,('caa')
,('fff');
CREATE FUNCTION pg_temp._test_table_values (_user_id int)
RETURNS TABLE
(
user_id int
,user_name varchar
)
SECURITY DEFINER AS $$
SELECT user_id, user_name
FROM _users
WHERE user_name LIKE '%a%'
AND user_id = _user_id;
$$ LANGUAGE SQL;
--join table and function
SELECT val.*
FROM _users AS u
JOIN pg_temp._test_table_values(u.user_id) AS val (user_id, user_name)
ON u.user_id = val.user_id;
当我从 SQL 服务器迁移到 PostgreSQL 时,我花了一段时间才习惯使用函数来处理所有事情,祝你好运!