Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2016
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Tienes que realizar un análisis de las tuplas antes de intentar insertarlas. Es decir, tienes que verificar si hay tuplas con misma clave primaria y dado el caso definir cual será la que deberás insertar. Una vez analizadas y procesadas entonces sí mandárselas al motor de BD. Si lo haces directamente en la BD se daría el siguiente supuesto:

Código:
  Se inserta tupla 1 de tabla A en tabla B
  Se toma siguiente tupla de tabla A
  clave de tupla 2 de tabla A ya existe en tabla B?
      [NO] insertar tupla 2 de tabla A en tabla B
      [SI] x propiedad de tupla 2 de tabla A es mayor que la que tiene la misma clave en tabla B ?
            [NO] No insertar nada y saltar a siguiente tupla de tabla A
            [SI] Eliminar tupla existente de tabla B e insertar la nueva tupla en tabla B
  Continuar con siguiente tupla de tabla A y repetir ciclo
Depende donde quieras colocar la lógica de negocio de tu aplicacion. En cualquier caso deberás usar una transacción para garantizar que si algo falla no te deje a medias alguna tabla.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 28-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo sigo sin entender

No podes tener una clave primaria duplicada, ningun motor de BD te puede permitir eso, ya que sino se pierde el chiste de la PK

El valor de la "PK", la que esta duplicada, tiene un valor real o es ficticio?

Es decir, es un id autogenerado, o es algo que tiene valor dentro de la logica del negocio? Por ej. es un numero de socio que esta impreso en las tarjetas (por decir algo)
Responder Con Cita
  #3  
Antiguo 28-02-2016
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Lo que nuestro amigo busca es que pueda "sustituir" un registro ya existente y con un id (PK) definido por otro con la misma id siempre y cuando el sustituto cumpla ciertas reglas. Es algo así como en mi refri tengo un cartón de leche, (su id es "leche") y mi refrigerador está programado para solo poder guardar un cartón de leche. Encuentro una marca diferente (tiene otras características) que la que ya tengo guardada, entonces tengo que decirle a mi refrigerador que si intento guardar un cartón de leche éste debe ser mejor (en alguna de sus propiedades que ahi mismo defino) que el que ya se encuentra almacenado. Si es así entonces, se desecha el que ya estaba y se guarda el nuevo cartón.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 29-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Ahora sí, crei que era un problema de merge

Lo querés resolver con sql o por código Delphi?

Quizá hacerlo por código sea más fácil, flexible, pero obviamente más lento
Responder Con Cita
  #5  
Antiguo 29-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Parece ser que Oracle soporta una sintaxis que podría servir en tu caso

Es como un "try-except"

Revisa este enlace
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
Clave primaria a 0 aromigaret Conexión con bases de datos 15 05-02-2016 23:55:03
duda clave primaria en Paradox mak8888 Tablas planas 1 26-06-2005 21:48:57
Ayuda Con Clave Primaria pablo2244 MySQL 4 30-05-2005 21:49:01
Cambiar clave primaria pinoxito Firebird e Interbase 7 13-01-2004 21:51:26
cambiar una clave primaria User_Baja_2 SQL 3 06-10-2003 18:03:38


La franja horaria es GMT +2. Ahora son las 00:27:30.


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