当我尝试执行以下代码时出现此问题:
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"
答案 0 :(得分:0)
在Postgres中没有TABLE变量这样的东西。您可以创建临时表:
https://www.postgresql.org/docs/current/static/sql-createtable.html
答案 1 :(得分:-1)
Postgres 使用起来可能会让人头疼,特别是如果您使用默认的 phpPgAdmin。在运行 Update 、 Insert 或 Alter 命令 时,取消选中查询框下方的分页结果复选框,并享受这个技巧。