如何在继承先前在postgresql上已经创建的类型的过程中创建表变量?

wnavrhmk  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(113)

我正在进行从SQL Server到Postgres的迁移练习,我在存储过程中发现了这种类型的变量:

CREATE     PROCEDURE [dbo].[CambiodedepositanteTIDIS_CERTS]
@Client(50),
@Email varchar(50),
@Planilla1 [dbo].[TipoPlanilla1]    Readonly

在变量planila1中,继承了类型TipoPanilla1,如果我理解正确的话,这是类型:

CREATE TYPE [dbo].[TipoPlanilla1] AS TABLE(
    [CuentaDeposito] [bigint] NULL,
    [CodigoOyd] [decimal](18, 0) NULL,
    [Especie] [varchar](150) NULL,
    [Isin] [varchar](50) NULL,
    [Emision] [decimal](18, 0) NULL,
    [ValorTrasladar] [decimal](18, 0) NULL
)

在postgress中有没有类似的方法?

yhuiod9q

yhuiod9q1#

Postgres没有“表变量”,但是您可以传递一个类型的数组。

CREATE TYPE tipoplanilla1 AS 
(
  cuentadeposito bigint,
  codigooyd decimal(18, 0),
  especie varchar(150),
  isin varchar(50),
  emision decimal(18, 0),
  valortrasladar decimal(18, 0)
);

然后将参数声明为数组:

create procedure cambiodedepositantetidis_certs(
    client text, email text, planilla1 tipoplanilla1[])
as
$$
begin
....
end
$$
language plpgsql;

注意,对于每个创建的表,Postgres会自动创建一个同名的类型,所以如果你想传递一个表的“行”,不需要创建额外的类型,你可以使用表的名称作为参数类型。

相关问题