Interbase - Copiar registros de una tabla a otra con IBExpert

 
Vista:

Copiar registros de una tabla a otra con IBExpert

Publicado por Carlos Hernandez (1 intervención) el 02/06/2015 01:26:06
Que tal estimados, primero quiero comentarles que soy tecnico en soporte, es decir no le he hecho a lo de la programada desde que fui a la escuela hace como 20 años :) ya que estoy dedicado más a los fierros y las redes. Pero tengo un problemita con una base de datos, he revisado, leido, recordado y les expongo la situación.

Es una base de datos de Firebird 2.5, segun leí podia manipular los datos con IBExpert, lo isntale y revise sus herramientas y me encuentro que puedo hacer scripts, ya que necesito copiar datos del campo de una tabla en los campos de otra.

Bien esto tengo:
TABLA: inve01 Campo: cuent_cont Tipo: varchar de longitud 28

Y

TABLA: cve_alter Campo: cves_alter01 Tipo: varchar de longitud 16
Ambas tablas tienen como llave principal el campo: cve_art.

LO QUE SE REQUIERE: copiar todos los datos de la columna " cuent_cont" en la columna "cves_alter01"

Según leí en los tutos sobre SQL y la instrucción UPDATE me parecío fácil y escribí lo siguiente:

update cves_alter01
SET cve_alter = (select cuent_cont FROM inve01)

Le di ejecutar el scrip y al parecer funciono y no me genero ningún error, le di el icono de comit para que se aplicara la instrucción pero no hizo nada.

Le vuelvo a dar ejecutar al scrip y ahora me manda el mensaje "CRACKED" No entiendo que puede estar mal, me podrían ayudar a lo mejor me falta un punto y coma, como cuando aprendi c++ jejeje, espero puedan apoyarme, gracias y saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Copiar registros de una tabla a otra con IBExpert

Publicado por Juan Marcos (1 intervención) el 24/06/2015 15:26:32
Hola Carlos:

El problema es el (select cuent_cont FROM inve01) que no devuelve solo un valor, debes ponerle un where.

No lo he probado pero seria algo asi:

update cves_alter
SET cve_alter01 = (select cuent_cont FROM inve01 WHERE (cves_alter01.cve_art = inve01.cve_art)

O lo que seria mejor, crearte un procedimiento tal como:

CREATE PROCEDURE COPIA_VALORES
as
declare variable cve_art integer; //o del valor que lo tengas deficinido.
declare variable cuent_cont varchar(28);
begin
for select cve_art, cuent_cont
from inve01
into :cve_art, :cuent_cont
do
begin
update cves_alter
SET cve_alter01 = :cuent_cont
where (cve_art = :cve_art);
end
end

Te aconsejo que utilices procedimientos. Podrás hacer casi cualquier cosa.

Cuidado tambien con los tamaños declarados un es de 28 y otro de 16. Si intentas guardar en el de 16 un valor que tenga más caracteres te saldra un error del tipo aritmetic overflow.

Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar