Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] trigger, mostrar alugunos campos de la primera tabla a la otra

Estas en el tema de trigger, mostrar alugunos campos de la primera tabla a la otra en el foro de Mysql en Foros del Web. quiero mostrar al ejecutar el trigger (insert into cliente ...) >>> tabla cliente 1 jose ortega gasset 2014-11-21 09:39:25 >>> tabla cuenta 1 1 120141121093925 ...
  #1 (permalink)  
Antiguo 19/11/2014, 09:52
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años
Puntos: 2
trigger, mostrar alugunos campos de la primera tabla a la otra

quiero mostrar al ejecutar el trigger (insert into cliente ...)
>>> tabla cliente
1 jose ortega gasset 2014-11-21 09:39:25
>>> tabla cuenta
1 1 120141121093925 5.00

la fila 1 de las dos tablas se llenan pero al ingresar un segundo cliente da el error
--insert into cliente(nombre,apellido)values('sofia','dias francisco') Error Code: 1242. Subquery returns more than 1 row 0.062 sec

este es el trigger ...
Código SQL:
Ver original
  1. delimiter &
  2. CREATE TRIGGER crearCuenta
  3. after
  4. INSERT ON cliente
  5. FOR each ROW
  6. BEGIN
  7. DECLARE cd INT;
  8. DECLARE rf VARCHAR(15);
  9. SET cd=(SELECT MAX(codCliente)FROM cliente);
  10. SET rf=(SELECT CONCAT
  11. (
  12. codCliente,
  13. TRIM( SUBSTRING( fechaR, 1,4 ) ),
  14. TRIM( SUBSTRING( fechaR, 6,2 ) ),
  15. TRIM( SUBSTRING( fechaR, 9,2 ) ),
  16. TRIM( SUBSTRING( fechaR, 12,2 ) ),
  17. TRIM( SUBSTRING( fechaR, 15,2 ) ),
  18. TRIM( SUBSTRING( fechaR, 18,2 ) )
  19. ) iii
  20. FROM cliente WHERE cd);
  21.  
  22. INSERT INTO cuenta (cuenta_codCliente,numeroCuenta)VALUES(cd,rf);
  23. END &
  24.  
  25. -- tablas<<<<<
  26. CREATE TABLE cliente(
  27. codCliente INT AUTO_INCREMENT,
  28. PRIMARY KEY (codCliente),
  29. nombre VARCHAR(30),
  30. apellido VARCHAR(30),
  31. fechaR TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  32. );
  33.  
  34.  
  35. CREATE TABLE cuenta(
  36. codCuenta INT AUTO_INCREMENT,PRIMARY KEY(codCuenta),
  37. cuenta_codCliente INT,
  38. FOREIGN KEY (cuenta_codCliente)REFERENCES cliente(codCliente),
  39. numeroCuenta VARCHAR(15),saldo DECIMAL(13,2)
  40.  DEFAULT 5
  41.  );
  42.  
  43.  
  44. CREATE TABLE movimientos(
  45. codMovimientos INT AUTO_INCREMENT,PRIMARY KEY(codMovimientos),
  46. movimientos_codCuenta INT,
  47. FOREIGN KEY(movimientos_codCuenta)REFERENCES cuenta(codCuenta),
  48. m_numeroCuenta VARCHAR(15),
  49. m_saldoInicial DECIMAL(13,2),
  50. m_saldoFinal DECIMAL(13,2),
  51. m_saldoParm DECIMAL(13,2),
  52. tipoM VARCHAR(1),
  53. fechaM TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  54. )
  55. --

Última edición por gnzsoloyo; 19/11/2014 a las 10:31
  #2 (permalink)  
Antiguo 19/11/2014, 10:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: trigger, mostrar alugunos campos de la primera tabla a la otra

Cita:
Subquery returns more than 1 row 0.062 sec
Significa sencillamente que una subconsulta que se usa en ese trigger, y que debería devolver un único valor, está devolviendo multiples (más de uno).
Es un error común.

Deberás debuggear a mano las acciones del trigger para ver donde te falla la lógica de qué subconsulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 23/11/2014, 09:12
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años
Puntos: 2
Respuesta: trigger, mostrar alugunos campos de la primera tabla a la otra

error 1 ( tarda en mostrar tablas) solución reiniciar el wamp
error 2 ( Subquery............) ....... solución ya no usar concat

Código SQL:
Ver original
  1. DROP DATABASE banco;CREATE DATABASE banco;USE banco;
  2. CREATE TABLE cliente(
  3. codCliente INT PRIMARY KEY AUTO_INCREMENT,
  4. dni VARCHAR(8),
  5. nombre VARCHAR(30),
  6. fechaR TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  7. );
  8. CREATE TABLE cuenta (
  9. codCuenta INT PRIMARY KEY AUTO_INCREMENT,
  10. cuenta_codCliente INT,
  11. FOREIGN KEY(cuenta_codCliente)REFERENCES cliente(codCliente),
  12. numeroCuenta VARCHAR(8),
  13. saldo DECIMAL (13,2) DEFAULT 5
  14. );
  15. DROP TRIGGER crearCuenta;
  16. delimiter &
  17. CREATE TRIGGER crearCuenta
  18. after
  19. INSERT ON cliente
  20. FOR each ROW
  21. BEGIN
  22. DECLARE cd INT;
  23. DECLARE od VARCHAR(8);
  24. SET cd=(SELECT codCliente FROM cliente ORDER BY codCliente DESC LIMIT 1);
  25. SET od=(SELECT dni FROM cliente WHERE codCliente = cd);
  26. INSERT INTO cuenta (cuenta_codCliente,numeroCuenta)VALUES(cd,od);
  27. END &
  28. INSERT INTO cliente (dni,nombre)VALUES('12345678','danae');
¿ podre incluir concat de otra forma ?

Última edición por gnzsoloyo; 23/11/2014 a las 09:30

Etiquetas: max, select, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:25.