【发布时间】:2018-05-27 21:39:54
【问题描述】:
我正在从 sql-server 迁移到 pgsql。 我使用在 java 中创建的脚本来执行此操作,但是当我尝试将此过程(sql-server)转换为函数并在 bd(pgsql)中进行测试时,控制台在 #paso1 部分显示错误。
这是 sql-server 中的代码:
/****** Object: StoredProcedure [dbo].[paBalanceClasificado] Script Date: 30/11/2017 16:38:42 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[paBalanceClasificado]
@empresa int,
@fecha1 smalldatetime,
@fecha2 smalldatetime
AS
SELECT SUBSTRING(b.codigoCuenta, 1, 1) + '000000' AS Codigo, SUM(a.montoDebe) AS Debe, SUM(a.montoHaber) AS Haber
INTO #PASO1
FROM movimientosContables a INNER JOIN
CuentasContables b ON a.codigoCorto = b.codigoCorto AND b.codigoEmpresa = @empresa
WHERE (a.codigoEmpresa = @empresa and fechaProceso between @fecha1 and @fecha2)
GROUP BY SUBSTRING(b.codigoCuenta, 1, 1) + '000000'
UNION ALL
SELECT SUBSTRING(b.codigoCuenta, 1, 2) + '00000' AS Codigo, SUM(a.montoDebe) AS Debe, SUM(a.montoHaber) AS Haber
FROM movimientosContables a INNER JOIN
CuentasContables b ON a.codigoCorto = b.codigoCorto AND b.codigoEmpresa = @empresa
WHERE (a.codigoEmpresa = @empresa and fechaProceso between @fecha1 and @fecha2)
GROUP BY SUBSTRING(b.codigoCuenta, 1, 2) + '00000'
UNION ALL
SELECT SUBSTRING(b.codigoCuenta, 1, 4) + '000' AS Codigo, SUM(a.montoDebe) AS Debe, SUM(a.montoHaber) AS Haber
FROM movimientosContables a INNER JOIN
CuentasContables b ON a.codigoCorto = b.codigoCorto AND b.codigoEmpresa = @empresa
WHERE (a.codigoEmpresa = @empresa and fechaProceso between @fecha1 and @fecha2)
GROUP BY SUBSTRING(b.codigoCuenta, 1, 4) + '000'
UNION ALL
SELECT SUBSTRING(b.codigoCuenta, 1, 7) AS Codigo, SUM(a.montoDebe) AS Debe, SUM(a.montoHaber) AS Haber
FROM movimientosContables a INNER JOIN
CuentasContables b ON a.codigoCorto = b.codigoCorto AND b.codigoEmpresa = @empresa
WHERE (a.codigoEmpresa = @empresa and fechaProceso between @fecha1 and @fecha2)
GROUP BY SUBSTRING(b.codigoCuenta, 1,7)
ORDER BY codigo
SELECT codigo, nombreCuenta, debe, haber,codigocorto
FROM #Paso1, cuentascontables
WHERE codigocuenta = codigo AND codigoempresa = @empresa --and
SUBSTRING(codigoCuenta, 5,3)='000'
order by codigo
GO
这是为 pgsql 生成的代码(错误在变量 #paso1 中,但我不知道该行之后是否存在更多错误。):
CREATE OR REPLACE FUNCTION pabalanceclasificado(
p_empresa int ,
p_fecha1 timestamp(0) ,
p_fecha2 timestamp(0)
)
RETURNS VOID
AS $$
DECLARE
BEGIN
select substring(b.codigocuenta, 1, 1) + '000000' as codigo, sum(a.montodebe) as debe, sum(a.montohaber) as haber
into #paso1
from movimientoscontables a inner join
cuentascontables b on a.codigocorto = b.codigocorto and b.codigoempresa = p_empresa
where (a.codigoempresa = p_empresa and fechaproceso between p_fecha1 and p_fecha2)
group by substring(b.codigocuenta, 1, 1) + '000000'
union all
select substring(b.codigocuenta, 1, 2) + '00000' as codigo, sum(a.montodebe) as debe, sum(a.montohaber) as haber
from movimientoscontables a inner join
cuentascontables b on a.codigocorto = b.codigocorto and b.codigoempresa = p_empresa
where (a.codigoempresa = p_empresa and fechaproceso between p_fecha1 and p_fecha2)
group by substring(b.codigocuenta, 1, 2) + '00000'
union all
select substring(b.codigocuenta, 1, 4) + '000' as codigo, sum(a.montodebe) as debe, sum(a.montohaber) as haber
from movimientoscontables a inner join
cuentascontables b on a.codigocorto = b.codigocorto and b.codigoempresa = p_empresa
where (a.codigoempresa = p_empresa and fechaproceso between p_fecha1 and p_fecha2)
group by substring(b.codigocuenta, 1, 4) + '000'
union all
select substring(b.codigocuenta, 1, 7) as codigo, sum(a.montodebe) as debe, sum(a.montohaber) as haber
from movimientoscontables a inner join
cuentascontables b on a.codigocorto = b.codigocorto and b.codigoempresa = p_empresa
where (a.codigoempresa = p_empresa and fechaproceso between p_fecha1 and p_fecha2)
group by substring(b.codigocuenta, 1,7)
order by codigo
select codigo, nombrecuenta, debe, haber,codigocorto
from #paso1, cuentascontables
where codigocuenta = codigo and codigoempresa = p_empresa --and substring(codigocuenta, 5,3)='000'
order by codigo
END;
$$ LANGUAGE plpgsql;
控制台显示:
ERROR: error de sintaxis en o cerca de «#»
LÍNEA 11: into #paso1
> Terminated with exit code 0.
但我认为这并不重要,因为我知道这不是实现该功能的方法......而且我不知道如何正确地做到这一点
【问题讨论】:
-
错误信息是什么?我无法在您的问题中找到它。
-
控制台显示: ERROR: error de sintaxis en o cerca de «#» LÍNEA 11: into #paso1 > 以退出代码 0 终止。但我认为这并不重要,因为我知道这不是实现该功能的方法...而且我不知道该怎么做
-
我认为 'into #paso1' 的第一个问题是 pgsql 不使用 '#' 分隔符作为变量。尝试在所有位置将其更改为仅“paso1”。仔细看,它看起来仍然以 MS SQL 为中心.. 里面可能有各种各样的问题,但我会从更改该变量名开始。
标签: postgresql plpgsql database-migration