错误:“TABLE”或其附近的语法错误

时间:2017-02-24 21:01:25

标签: 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_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"

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

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