如何解决表格类型的删除操作的PostgreSQL代码
我有一个用于删除MSSQL中的表类型的代码。必须转换为PGSQL才会出错。 期待从用户定义的表类型中删除的PGSQL代码: 下面的MSSQL代码:
declare @Entity TRef_StructureTree readonly //input parameter from procedure
DELETE Tef_StructureTree
FROM Tef_StructureTree
inner join (select * from @Entity) as source
on Tef_StructureTree.ChildCodeBDR=source.ChildCodeBDR AND
Tef_StructureTree.ChildScheme=source.ChildScheme;
下面是USer定义的表类型的定义:
CREATE TYPE [dbo].[Tef_StructureTree] AS TABLE(
[ChildCodeBDR] [numeric](10,0) NOT NULL,[ChildScheme] [nvarchar](100) NOT NULL,)
在PGSQL代码以下:
CREATE OR REPLACE FUNCTION UpdateStrucTree(v_entity Tef_StructureTree[])
as
begin
DELETE FROM v_entity
where v_entity."ChildCodeBDR" in(select "source"."ChildCodeBDR" from unnest(v_entity) as "source" )
and v_entity."ChildScheme" in (select "source"."ChildScheme" from unnest(v_entity) as "source" );
end;
错误:关系“ v_entity”不存在 请提供等效的内容来帮助您!
解决方法
您的参数称为v_entitydata
而不是v_entity
,因此您需要更改参数名称或对其的引用。您可能要从表Tef_StructureTree
中删除,而不要从传递的数组中删除。
您的函数结构对于Postgres也不有效,因为函数主体需要以字符串形式提供,例如使用dollar quoting。
您也可以只使用一个子查询来简化条件。
因此,将所有内容放在一起,函数应如下所示:
CREATE OR REPLACE FUNCTION UpdateStrucTree(v_entity "Tef_StructureTree"[])
as
$$
DELETE FROM "Tef_StructureTree"
where ("ChildCodeBDR","ChildScheme") in (select "ChildCodeBDR","ChildScheme"
from unnest(v_entity) )
$$
language sql;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。