如何将 "type" 作为输入参数传递给 Postgresql 中的 func
How to pass "type" as input parameter to func in Postgresql
期待 PostgreSQL 等效代码。请帮忙。将数据库从 SQL 服务器迁移到 Postgresql 时出现问题。
SQL 服务器代码:
CREATE TYPE [InactiveOwnDetails] AS TABLE
(
[EntType] [nvarchar](10) NULL,
[EntName] [nvarchar](400) NULL,
)
CREATE PROCEDURE [dbo].[SP_GenerateInactiveOwnEmail]
AS
DECLARE @InactiveOwnDetails InactiveOwnDetails
INSERT INTO InactiveOwnEmailActivity (Subject_Email)
VALUES (
SELECT **Fn_GetInactivePpMailBodyContent**(@InactiveOwnDetails)
)
CREATE FUNCTION [dbo].[**Fn_GetInactivePpMailBodyContent**]
(@InactiveOwnDetails InactiveOwnDetails READONLY)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SET @ResultString = '<p> Dear'+CAST(12 AS NVARCHAR)+', '
RETURN @ResultString
END
请帮忙!
要回答直接问题,您可以将(记录)类型传递给函数:
CREATE TYPE inactive_own_details as (ent_type varchar(10), ent_name varchar(400));
您可以创建一个接收该类型和 returns 东西的函数:
CREATE FUNCTION fn_GetInactivePpMailBodyContent(p_details inactive_own_details)
RETURNS text
AS
$$
select concat('<p> Dear', p_details.ent_name, '</p>');
$$
language sql;
问题中的函数对我来说没有意义,因为它根本不使用传递的类型。
在程序中可以这样使用:
CREATE PROCEDURE sp_generateinactiveownemail()
AS
$$
declare
l_details inactive_own_details;
begin
l_details := ('type', 'Arthur'); -- initialize the variable
INSERT INTO inactiveownemailactivity (subject_email)
VALUES (SELECT fn_getinactiveppmailbodycontent(l_details));
end;
$$
language plpgsql;
注意:create procedure
需要 Postgres 11 或更高版本。您已使用 Postres 9.5 标记您的问题 - 将在大约 6 个月内弃用。一个新的迁移项目在 2020 年肯定 不 使用该版本。您应该迁移到 Postgres 12。
期待 PostgreSQL 等效代码。请帮忙。将数据库从 SQL 服务器迁移到 Postgresql 时出现问题。
SQL 服务器代码:
CREATE TYPE [InactiveOwnDetails] AS TABLE
(
[EntType] [nvarchar](10) NULL,
[EntName] [nvarchar](400) NULL,
)
CREATE PROCEDURE [dbo].[SP_GenerateInactiveOwnEmail]
AS
DECLARE @InactiveOwnDetails InactiveOwnDetails
INSERT INTO InactiveOwnEmailActivity (Subject_Email)
VALUES (
SELECT **Fn_GetInactivePpMailBodyContent**(@InactiveOwnDetails)
)
CREATE FUNCTION [dbo].[**Fn_GetInactivePpMailBodyContent**]
(@InactiveOwnDetails InactiveOwnDetails READONLY)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SET @ResultString = '<p> Dear'+CAST(12 AS NVARCHAR)+', '
RETURN @ResultString
END
请帮忙!
要回答直接问题,您可以将(记录)类型传递给函数:
CREATE TYPE inactive_own_details as (ent_type varchar(10), ent_name varchar(400));
您可以创建一个接收该类型和 returns 东西的函数:
CREATE FUNCTION fn_GetInactivePpMailBodyContent(p_details inactive_own_details)
RETURNS text
AS
$$
select concat('<p> Dear', p_details.ent_name, '</p>');
$$
language sql;
问题中的函数对我来说没有意义,因为它根本不使用传递的类型。
在程序中可以这样使用:
CREATE PROCEDURE sp_generateinactiveownemail()
AS
$$
declare
l_details inactive_own_details;
begin
l_details := ('type', 'Arthur'); -- initialize the variable
INSERT INTO inactiveownemailactivity (subject_email)
VALUES (SELECT fn_getinactiveppmailbodycontent(l_details));
end;
$$
language plpgsql;
注意:create procedure
需要 Postgres 11 或更高版本。您已使用 Postres 9.5 标记您的问题 - 将在大约 6 个月内弃用。一个新的迁移项目在 2020 年肯定 不 使用该版本。您应该迁移到 Postgres 12。