ich bin migrieren von sql-server zu pgsql. Ich benutze ein Skript in Java für das, aber wenn ich versuche, diese Prozedur (sql-Server) in eine Funktion zu konvertieren und testen in der bd (pgsql) die Konsole zeigen Fehler im Teil # Paso1.migration nach pgsql, fehler in einer funktion mit in
Dies ist der Code in 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
und dies ist der für pgsql generierten Code (der Fehler in der Variable # paso1 ist, aber ich weiß nicht, ob nach dieser Zeile mehr Fehler vorhanden ist.) :
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;
die Konsole zeigt:
ERROR: error de sintaxis en o cerca de «#»
LÍNEA 11: into #paso1
> Terminated with exit code 0.
Aber ich denke, das ist nicht wichtig, weil ich weiß th auf dies ist nicht die Art und Weise, dass funtion zu tun ... und ich weiß nicht, wie zu tun corectly
Was ist die Fehlermeldung? Ich kann es in Ihrer Frage nicht finden. – DDeMartini
die Konsole zeigt: FEHLER: Fehler de sintaxis en o cerca de # LINEA 11: in # paso1 > Mit Exit-Code 0 beendet. ABER ich denke, das ist nicht wichtig, weil ich weiß, dass dies nicht ist Der Weg, um diese Funktion zu tun ... und ich weiß nicht, wie doe corectly –
Ich denke, das erste Problem mit 'in # paso1' ist, dass pgsql nicht das '#' Trennzeichen für eine Variable verwendet. Versuchen Sie, das an allen Orten nur in "Paso1" zu ändern. Wenn ich es überblicke, sieht es immer noch MS SQL-zentrisch aus ... könnte alle möglichen Probleme enthalten, aber ich würde damit anfangen, diesen Variablennamen zu ändern. – DDeMartini