【问题标题】:ERROR: syntax error at or near "TABLE"错误:“TABLE”处或附近的语法错误
【发布时间】:2017-07-15 20:24:39
【问题描述】:

当我尝试执行以下代码时遇到了这个问题:

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 版终于给我这个错误了:

错误:“TABLE”处或附近的语法错误 第 27 行:声明 NuevoIdentity 表(id​​ INT) ^ 上下文:无效的类型名称“TABLE (id INT) 插入 IP_RE_EMPRESA_CATEGOIA ( des_nombre , cod_empresa , id_padre , 数量 , 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) 选择 ( p_nombre , p_codigoEmpresa , p_codigoPadre , 合并 (p_orden, 0) , p_muestraBoletin , p_categoriaDefecto , p_envioAutomatico , p_envioDirecto , p_usuario , p_directionIp ) 从 NuevoIdentity 中选择 ID” ********** 错误 ********** 错误:“TABLE”处或附近的语法错误 SQL 状态:42601 人物:814 上下文:无效类型名称“TABLE (id INT) 插入 IP_RE_EMPRESA_CATEGOIA ( des_nombre , cod_empresa , id_padre , 数量 , 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) 选择 ( p_nombre , p_codigoEmpresa , p_codigoPadre , 合并 (p_orden, 0) , p_muestraBoletin , p_categoriaDefecto , p_envioAutomatico , p_envioDirecto , p_usuario , p_directionIp ) 从 NuevoIdentity 中选择 ID”

【问题讨论】:

    标签: postgresql syntax


    【解决方案1】:

    在 Postgres 中没有 TABLE 变量这样的东西。您可以创建一个临时表:

    https://www.postgresql.org/docs/current/static/sql-createtable.html

    【讨论】:

      【解决方案2】:

      使用 Postgres 可能会让人头疼,尤其是在您使用默认的 phpPgAdmin 时。在运行 Update 、 Insert 或 Alter commands 时,取消选中查询框下方的 Paginate results 复选框,然后享受这个技巧。

      【讨论】:

        猜你喜欢
        • 2017-02-20
        • 2010-12-24
        • 2016-07-10
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多