Club Delphi  
    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 17-09-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Contar registros en un insert into

Hola amigos.
Hay alguna forma de saber cuantos registros se importaron utilizando:
Código SQL [-]
INSERT INTO TABLA2 SELECT * FROM TABLA1 WHERE....
y lo mismo para cuando es un DELETE FROM ....

Gracias
Responder Con Cita
  #2  
Antiguo 17-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿BD?
Responder Con Cita
  #3  
Antiguo 17-09-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Perdon....
FireBird 2.5 y el código es desde un programa D7
Gracias
Responder Con Cita
  #4  
Antiguo 17-09-2015
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por jars Ver Mensaje
Hola amigos.
Hay alguna forma de saber cuantos registros se importaron utilizando:
Código SQL [-]
INSERT INTO TABLA2 SELECT * FROM TABLA1 WHERE....
y lo mismo para cuando es un DELETE FROM ....

Gracias

yo haria algo asi.
Código Delphi [-]
var :res:integer;

with qry do 
begin
 active := false;
 sql.clear;
 sql.add('select count(*) as val from tabla where...');
 active := true;
 res := FieldbyName('val').asInteger;
 active := false;
end;


with qry do 
begin
 active := false;
 sql.clear;
 sql.add('Insert into ....');
 ExeqSql;
end;

/// res , contendria el valor de los registros
__________________
all your base are belong to us
Responder Con Cita
  #5  
Antiguo 17-09-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
El problema es que cuando son algunos millones de registros tarda mucho.
Responder Con Cita
  #6  
Antiguo 17-09-2015
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por jars Ver Mensaje
El problema es que cuando son algunos millones de registros tarda mucho.
prueba a indexar los registros involucrados en el where de la sentencia, la lentitud por la cantidad de registros no es mas que una mala estructuracion de indices
__________________
all your base are belong to us
Responder Con Cita
  #7  
Antiguo 17-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jars.

Firebird cuenta con la variable de contexto ROW_COUNT que contiene el número de columnas que fueron afectadas por la última accion, pero está disponible solamente para SQL procedimental.

Entonces podrías hacer un procedimiento:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_INSERT_TABLA1 
RETURNS (
     NOROWS INTEGER)
AS
BEGIN 
  INSERT INTO TABLA2
  SELECT * FROM TABLA1;
 
  NOROWS = ROW_COUNT;
  SUSPEND;
END^

SET TERM ; ^

Ejemplo de uso:
Código SQL [-]
SELECT NOROWS AS TOTAL FROM SP_INSERT_TABLA1

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 17-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Firebird cuenta con la variable de contexto ROW_COUNT que contiene el número de columnas que fueron afectadas por la última accion, pero está disponible solamente para SQL procedimental.
Es el mejor método, el más rápido y seguro.
Responder Con Cita
  #9  
Antiguo 17-09-2015
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Es el mejor método, el más rápido y seguro.

Bien, siempre se aprende algo nuevo, desconocia esa funcion...

Saludos!
__________________
all your base are belong to us
Responder Con Cita
  #10  
Antiguo 17-09-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias Ecfisa y Casimiro, es lo que estaba probando ahora.
Look, ya tengo un indice por el campo del where, asi que no es por mala estructuración.
Gracias
Responder Con Cita
  #11  
Antiguo 17-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por look Ver Mensaje
Bien, siempre se aprende algo nuevo, desconocia esa funcion...
Saludos!
Cierto, todos los días se aprende algo nuevo.
Responder Con Cita
  #12  
Antiguo 17-09-2015
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por jars Ver Mensaje
El problema es que cuando son algunos millones de registros tarda mucho.
A parte que ya tienes una respuesta para lo otro, debes tener en cuenta que varios millones de registros, es más cientos de millones de registros son o deben ser números normales en una tabla y Firebird trata bien con ellos, si se demora mucho haciendo un:
Código SQL [-]
 select count(*) where ...
Debes revisar porque algo puede estar mal, tal vez el indice, tal vez metes en un where un campo con indice con alguna instrucción que anula dicho indice (si por ejemplo haces un substring, un uppercase, en el where este no usará el indice), para verificar puedes buscar en una herramienta (para mis querys yo suelo usar el database worckbench) la información que devuelve de la ejecución de un query, ahí uno puede ver cuantos de los campos que intervienen en el query están o no indexados correctamente, mira un poco y podrás acelerar a cuestiones de milisegundos cosas que pueden durar hasta minutos
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
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
Contar registros con condicion oscarac SQL 2 06-06-2011 03:42:37
Contar Registros KAYO SQL 10 22-07-2010 19:47:43
Contar registros de una tabla sandra mendoza Conexión con bases de datos 4 14-10-2008 00:08:38
Contar registros de un MailMerge Elenita Servers 0 31-10-2006 10:47:31
Contar Registros Roilo SQL 10 18-07-2006 21:20:24


La franja horaria es GMT +2. Ahora son las 23:15:18.


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