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命令时,取消选中查询框下方的“分页结果”复选框,并享受这一技巧