Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Error en INSERT masivo

Buenos días. Estoy tratando de ejecutar un INSERT masivo en una tabla. La definición de la tabla es esta:
Código SQL [-]
CREATE TABLE Cierre (Fecha DATE NOT NULL, GruFac INTEGER NOT NULL, Bruto FLOAT, Iva FLOAT)
ALTER TABLE Cierre ADD CONSTRAINT PK_Cierre PRIMARY KEY (Fecha, GruFac)
y el INSERT que quiero ejecutar es este:
Código SQL [-]
INSERT INTO Cierre (Fecha, 
                    GruFac, 
                    Bruto, 
                    Iva) 
VALUES ((SELECT A.Fecha, 
                C.Facturacion, 
                SUM(A.Cantidad * A.Bruto - A.ImpDto), 
                SUM((A.Cantidad * A.Bruto - A.ImpDto) * A.TipoIva / 100)
           FROM DetFactura A, Articulo B, Familia C
          WHERE A.TipoDoc||'$'||A.NumFactura IN ('1$1','1$2','2$1','2$2')
            AND A.Codigo = B.Codigo AND B.Familia = C.Codigo
          GROUP BY Fecha, Facturacion))
El resultado del SELECT que hay en el query es este:

Cuando intento ejecutarlo en SQL Manager, para probarlo, me da este error:
Cita:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Count of column list and variable list do not match.
y hasta donde veo hay el mismo número de columnas que de variables. No soy capaz de ver que estoy haciendo mal.
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
No se puede usar un SELECT que devuelve múltiples columnas dentro de un VALUES. En Firebird, VALUES (SELECT ...) solo funciona si el SELECT devuelve una sola fila y una sola columna.
Tu SELECT devuelve 4 columnas, y además múltiples filas. La sintaxis correcta es usar INSERT ... SELECT directamente, sin VALUES.


Elimina VALUES y los paréntesis exteriores, dejando solo INSERT INTO ... SELECT .... Así Firebird insertará todas las filas que devuelva tu consulta.
Responder Con Cita
  #3  
Antiguo Hace 3 Semanas
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Debería quedar así:

Código SQL [-]
insert into cierre (
    fecha,
    grufac,
    bruto,
    iva)
select
    a.fecha,
    c.facturacion,
    sum(a.cantidad * a.bruto - a.impdto),
    sum((a.cantidad * a.bruto - a.impdto) * a.tipoiva / 100)
from detfactura a, articulo b, familia c
where
a.tipodoc || '$' || a.numfactura in ('1$1', '1$2', '2$1', '2$2') and
a.codigo = b.codigo and
b.familia = c.codigo
group by a.fecha, c.facturacion

Además, utiliza el alias para todos los campos.

group by a.fecha, c.facturacion
Responder Con Cita
  #4  
Antiguo Hace 3 Semanas
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Gracias a los dos. No me había dado cuenta de ese detalle.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error: too much mail from (dirección ip) enviando correo masivo Gregorio Cíber Internet 2 10-07-2015 13:43:48
Insert masivo de datos, cada vez mas lento papote654 MS SQL Server 14 16-05-2012 18:02:17
Insert múltiple (o masivo) santiago14 SQL 24 12-03-2011 13:19:31
Insert masivo en firebird santiago14 Firebird e Interbase 2 24-05-2010 02:50:29
Error con insert Paulao Varios 1 27-04-2010 19:50:55


La franja horaria es GMT +2. Ahora son las 04:09:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi