Postgresql 错误:在“或”附近出现语法错误;表「;

Postgresql 错误:在“或”附近出现语法错误;表「;,postgresql,syntax,Postgresql,Syntax,我在尝试执行以下代码时遇到此问题: CREATE OR REPLACE FUNCTION USP_IP_CREA_EMPRESA_CATEGORIA (p_nombre td_nombre_extenso ,p_codigoEmpresa td_codigo10 ,p_codigoPadre int ,p_orden int ,p_muestraBoletin td_estado_auditoria ,p_categoriaDefecto td_estado_auditoria ,p_envio

我在尝试执行以下代码时遇到此问题:

CREATE OR REPLACE FUNCTION USP_IP_CREA_EMPRESA_CATEGORIA
(p_nombre td_nombre_extenso
,p_codigoEmpresa td_codigo10
,p_codigoPadre int
,p_orden int
,p_muestraBoletin td_estado_auditoria
,p_categoriaDefecto td_estado_auditoria
,p_envioAutomatico td_estado_auditoria
,p_envioDirecto td_estado_auditoria
,p_usuario td_usuario_auditoria
,p_direccionIp td_ip_auditoria
) RETURNS VOID
--WITH ENCRYPTION
AS $$
    DECLARE v_ordenReal INT = (SELECT (max(num_orden) + 1) FROM IP_RE_EMPRESA_CATEGORIA WHERE cod_empresa = p_codigoEmpresa);
 v_ordenHijo INT = (SELECT (max(num_orden) + 1) FROM IP_RE_EMPRESA_CATEGORIA WHERE cod_empresa = p_codigoEmpresa and (id_padre = p_codigoPadre));
BEGIN
IF p_orden = 0 and p_codigoPadre = 0
THEN
    p_orden := v_ordenReal;
ELSE
    p_orden := v_ordenHijo;
END IF;

DECLARE NuevoIdentity TABLE (id INT)
INSERT INTO IP_RE_EMPRESA_CATEGORIA
(
    des_nombre
    , cod_empresa
    , id_padre
    , num_orden
    , est_mostrar_boletin
    , est_categoria_defecto
    , est_envio_automatico
    , est_envio_directo
    , cod_usuario_registro
    , des_ip_registro
)
OUTPUT INSERTED.id_categoria INTO NuevoIdentity(id)
SELECT
(
    p_nombre
    , p_codigoEmpresa
    , p_codigoPadre
    , COALESCE(p_orden, 0)
    , p_muestraBoletin
    , p_categoriaDefecto
    , p_envioAutomatico
    , p_envioDirecto
    , p_usuario
    , p_direccionIp
)

SELECT id FROM NuevoIdentity;
END;

$$ LANGUAGE plpgsql;
最后,Postgresql的9.6版给了我以下错误:

ERROR: syntax error at or near "TABLE" LINE 27: DECLARE NuevoIdentity TABLE (id INT) ^ CONTEXT: invalid type name "TABLE (id INT) INSERT INTO IP_RE_EMPRESA_CATEGORIA ( des_nombre , cod_empresa , id_padre , num_orden , est_mostrar_boletin , est_categoria_defecto , est_envio_automatico , est_envio_directo , cod_usuario_registro , des_ip_registro ) OUTPUT INSERTED.id_categoria INTO NuevoIdentity(id) SELECT ( p_nombre , p_codigoEmpresa , p_codigoPadre , COALESCE(p_orden, 0) , p_muestraBoletin , p_categoriaDefecto , p_envioAutomatico , p_envioDirecto , p_usuario , p_direccionIp ) SELECT id FROM NuevoIdentity" ********** Error ********** ERROR: syntax error at or near "TABLE" SQL state: 42601 Character: 814 Context: invalid type name "TABLE (id INT) INSERT INTO IP_RE_EMPRESA_CATEGORIA ( des_nombre , cod_empresa , id_padre , num_orden , est_mostrar_boletin , est_categoria_defecto , est_envio_automatico , est_envio_directo , cod_usuario_registro , des_ip_registro ) OUTPUT INSERTED.id_categoria INTO NuevoIdentity(id) SELECT ( p_nombre , p_codigoEmpresa , p_codigoPadre , COALESCE(p_orden, 0) , p_muestraBoletin , p_categoriaDefecto , p_envioAutomatico , p_envioDirecto , p_usuario , p_direccionIp ) SELECT id FROM NuevoIdentity" 错误:“表”处或附近出现语法错误 第27行:声明新身份表(id INT) ^ 上下文:无效的“类型名称”表(id INT) 插入IP_RE_EMPRESA_分类 ( 诺姆布雷酒店 ,cod_empresa ,id_padre ,num_orden ,est_mostrar_boletin ,属于缺陷类别 ,est_envio_automatico ,这是我们的董事会 ,cod_usuario_registro ,des_ip_registro ) 将INSERTED.id_categoria输出到NuevoIdentity(id) 挑选 ( p_nombre ,p_codigoEmpresa ,p_codigoPadre ,聚结(p_orden,0) ,p_muestraBoletin ,p_categoriaadefecto ,p_envioAutomatico ,p_envirecto ,p_usuario ,p_direccionIp ) 从NuevoIdentity中选择id“ **********错误********** 错误:“表”处或附近出现语法错误 SQL状态:42601 字符:814 上下文:无效的“类型名称”表(id INT) 插入IP_RE_EMPRESA_分类 ( 诺姆布雷酒店 ,cod_empresa ,id_padre ,num_orden ,est_mostrar_boletin ,属于缺陷类别 ,est_envio_automatico ,这是我们的董事会 ,cod_usuario_registro ,des_ip_registro ) 将INSERTED.id_categoria输出到NuevoIdentity(id) 挑选 ( p_nombre ,p_codigoEmpresa ,p_codigoPadre ,聚结(p_orden,0) ,p_muestraBoletin ,p_categoriaadefecto ,p_envioAutomatico ,p_envirecto ,p_usuario ,p_direccionIp ) 从NuevoIdentity中选择id“
Postgres中没有表变量。您可以创建临时表:


Postgres可能是一个让人头疼的问题,特别是如果您使用默认的phpPgAdmin。在运行Update、Insert或Alter命令时,取消选中查询框下方的“分页结果”复选框,并享受这一技巧