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

[SOLUCIONADO] Error en Procedimiento Almacenado

Estas en el tema de Error en Procedimiento Almacenado en el foro de Mysql en Foros del Web. Alguien me puede ayudar ya que estoy haciendo dos Procedimientos almacenados, los dos contienen parametros pero no entiendo por que el error: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 06/01/2015, 17:56
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Mensaje Error en Procedimiento Almacenado

Alguien me puede ayudar ya que estoy haciendo dos Procedimientos almacenados, los dos contienen parametros pero no entiendo por que el error:


Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_FERSA_InsertaCotizacion
  2. (
  3.  p_Folio VARCHAR(100),
  4.  p_Producto VARCHAR(100),
  5.  p_Cantidad INT(11),
  6.  p_Codigo VARCHAR(100),
  7.  p_Descripcion VARCHAR(200),
  8.  p_Precio DECIMAL(18,2),
  9.  p_Importe DECIMAL(18,2),
  10.  p_SubTotal DECIMAL(18,2),
  11.  p_Iva DECIMAL(18,2),
  12.  p_Total DECIMAL(18,2),
  13.  p_FechaRegistro TIMESTAMP
  14. )
  15.  
  16. INSERT INTO detallecotizacion (Folio, Producto, Cantidad, Codigo, Descripcion, Precio, Importe, SubTotal, Iva, Total, FechaRegistro)
  17.            
  18. VALUES  (p_Folio, p_Producto, p_Cantidad, p_Codigo, p_Descripcion, p_Precio, p_Importe, p_SubTotal, p_Iva, p_Total, p_FechaRegistro) -- aqui al cerrar es donde me marca error.
  19.  


Y en este otro es lo mismo pero me marca el error al iniciar la columna:

Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_FERSA_ConsultaFormularioCotizador
  2. (
  3.  p_Producto VARCHAR(100),
  4.  p_tipo VARCHAR(100),
  5.  p_Frente VARCHAR(100),
  6.  p_Profundidad VARCHAR(10),
  7.  p_Altura VARCHAR(100),
  8.  p_Piso VARCHAR(100),
  9.  p_Puertas VARCHAR(100),
  10.  p_Modulos VARCHAR(10)
  11. )
  12.  
  13. c.Producto into p_Producto,
  14. c.Sub_Producto into p_tipo,  -- aqui al iniciar es donde me marca el error
  15. c.Frente into p_Frente,
  16. c.Profundidad into p_Profundidad,
  17. c.Altura into p_Altura,
  18. c.Piso into p_Piso,
  19. c.Puertas into p_Puertas
  20.  
  21. FROM producto p , sub_producto sp, combinaciones c
  22. WHERE p.id_prod = sp.id_prod
  23. AND sp.id_prod = c.ID_SUB_PROD
  24.  
  25.  END;


Gracias y Saludos

Última edición por gnzsoloyo; 06/01/2015 a las 18:28
  #2 (permalink)  
Antiguo 06/01/2015, 18:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error en Procedimiento Almacenado

Tienes varios errores en el segundo SP:
1) Es un solo INTO seguido de todas las variables. Eso lo puedes ver en el manual de referencia (recomiendo que lo leas, está en la web oficial).
2) Todos los parámetros que pones son de entrada y ninguno de salida, por lo que ese SP no te devolverá datos en ellos.
Esto también se explica claramente en el manual de referencia...

Además:
3) La consulta que pusiste puede devolver más de un registro, pero por parámetro sólo puede devolver valores simples. MySQL no tiene datos de tipo CURSOR, o ARRAY, como otros DBMS, por lo que el SP disparará un error si hay más de un registro.
Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_FERSA_ConsultaFormularioCotizador
  2. (
  3.  OUT p_Producto VARCHAR(100),
  4.  OUT p_tipo VARCHAR(100),
  5.  OUT p_Frente VARCHAR(100),
  6.  OUT p_Profundidad VARCHAR(10),
  7.  OUT p_Altura VARCHAR(100),
  8.  OUT p_Piso VARCHAR(100),
  9.  OUT p_Puertas VARCHAR(100),
  10.  OUT p_Modulos VARCHAR(10)
  11. )
  12.  
  13.     SELECT  
  14.         c.Producto,
  15.         c.Sub_Producto,
  16.         c.Frente,
  17.         c.Profundidad,
  18.         c.Altura,
  19.         c.Piso,
  20.         c.Puertas
  21.     INTO P_PRODUCTO, P_TIPO, P_FRENTE, P_PROFUNDIDAD, P_ALTURA, P_PISO, P_PUERTAS
  22.     FROM producto p INNER JOIN sub_producto sp ON p.id_prod = sp.id_prod
  23.         INNER JOIN combinaciones c ON sp.id_prod = c.ID_SUB_PROD;
  24.   END;

Yo recomendaría no usar parametros y obtener la tabla resultado que devuelve el SP directamente como tal, pero no sé en qué contexto la estás usando.
__________________
¿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 07/01/2015, 12:35
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Error en Procedimiento Almacenado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes varios errores en el segundo SP:
1) Es un solo INTO seguido de todas las variables. Eso lo puedes ver en el manual de referencia (recomiendo que lo leas, está en la web oficial).
2) Todos los parámetros que pones son de entrada y ninguno de salida, por lo que ese SP no te devolverá datos en ellos.
Esto también se explica claramente en el manual de referencia...

Además:
3) La consulta que pusiste puede devolver más de un registro, pero por parámetro sólo puede devolver valores simples. MySQL no tiene datos de tipo CURSOR, o ARRAY, como otros DBMS, por lo que el SP disparará un error si hay más de un registro.
Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_FERSA_ConsultaFormularioCotizador
  2. (
  3.  OUT p_Producto VARCHAR(100),
  4.  OUT p_tipo VARCHAR(100),
  5.  OUT p_Frente VARCHAR(100),
  6.  OUT p_Profundidad VARCHAR(10),
  7.  OUT p_Altura VARCHAR(100),
  8.  OUT p_Piso VARCHAR(100),
  9.  OUT p_Puertas VARCHAR(100),
  10.  OUT p_Modulos VARCHAR(10)
  11. )
  12.  
  13.     SELECT  
  14.         c.Producto,
  15.         c.Sub_Producto,
  16.         c.Frente,
  17.         c.Profundidad,
  18.         c.Altura,
  19.         c.Piso,
  20.         c.Puertas
  21.     INTO P_PRODUCTO, P_TIPO, P_FRENTE, P_PROFUNDIDAD, P_ALTURA, P_PISO, P_PUERTAS
  22.     FROM producto p INNER JOIN sub_producto sp ON p.id_prod = sp.id_prod
  23.         INNER JOIN combinaciones c ON sp.id_prod = c.ID_SUB_PROD;
  24.   END;

Yo recomendaría no usar parametros y obtener la tabla resultado que devuelve el SP directamente como tal, pero no sé en qué contexto la estás usando.

Lo que estoy haciendo es un SP para conectarlo mediante ASP.NET a una pagina de un cotizador en donde cuando se escoja un producto vaya filtrando los sub_productos que tiene , es por eso que necesito los parametros pero noto que me esta marcando unos errores el SP que me escribiste me esta marcando errores de punto y coma por lo que no deja crear el SP.
Código MySQL:
Ver original
  1. CREATE PROCEDURE SP_ConsultaCotizador
  2. (
  3.  OUT p_Producto VARCHAR(100),
  4.  OUT p_tipo VARCHAR(100),
  5.  OUT p_Frente VARCHAR(100),
  6.  OUT p_Profundidad VARCHAR(10),
  7.  OUT p_Altura VARCHAR(100),
  8.  OUT p_Piso VARCHAR(100),
  9.  OUT p_Puertas VARCHAR(100),
  10.  OUT p_Modulos VARCHAR(10)
  11. )
  12.  
  13.     SELECT  
  14.         c.Producto,
  15.         c.Sub_Producto,
  16.         c.Frente,
  17.         c.Profundidad,
  18.         c.Altura,
  19.         c.Piso,
  20.         c.Puertas
  21.     INTO p_Producto, p_tipo, p_Frente, p_Profundidad, p_Altura, p_Piso, p_Puertas
  22.     FROM producto p INNER JOIN sub_producto sp ON p.id_prod = sp.id_prod
  23.         INNER JOIN combinaciones c ON sp.id_prod = c.id_prod; -- AL CERRAR CON ; ES DONDE ME MARCA EL ERROR DE PUNTO Y COMA
  24.   END; -- AQUI TAMBIEN AL CERRAR ME MARCA ERROR DE PUNTO Y COMA

Última edición por gnzsoloyo; 07/01/2015 a las 12:43
  #4 (permalink)  
Antiguo 07/01/2015, 12:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error en Procedimiento Almacenado

Empecemos por un punto importante: ¿De qué forma estás intentando crear el SP? ¿Con ASP.Net o lo estás creando directametne con una interfaz (MySQL Workbench, phpMyadmin, consola de MySQL, etc.)?

Esto es imoprtante porque dependiendo de cómo lo cargas será la indicación que te de.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/01/2015, 14:03
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Error en Procedimiento Almacenado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por un punto importante: ¿De qué forma estás intentando crear el SP? ¿Con ASP.Net o lo estás creando directametne con una interfaz (MySQL Workbench, phpMyadmin, consola de MySQL, etc.)?

Esto es imoprtante porque dependiendo de cómo lo cargas será la indicación que te de.
Lo estoy haciendo con MySQL Workbench.

Saludos.
  #6 (permalink)  
Antiguo 07/01/2015, 14:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error en Procedimiento Almacenado

El editor de SP es suficiente para lo que necesitas. Escribe solamente el código, dejando que el Workbench ponga el cierre. No le pongas nada más alla del END que te escribe. NADA.
Concentrate en poner los parametros del prototipo y el body, sin agregados.

El Workbench se encargará del resto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 07/01/2015, 14:35
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Error en Procedimiento Almacenado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El editor de SP es suficiente para lo que necesitas. Escribe solamente el código, dejando que el Workbench ponga el cierre. No le pongas nada más alla del END que te escribe. NADA.
Concentrate en poner los parametros del prototipo y el body, sin agregados.

El Workbench se encargará del resto.
Estoy deacuerdo con lo que me dices de no escribir nada despues del END el problema esta en el ultimo inner join al finalizar la linea me marca error de punto y coma y por eso no me deja crear el SP, y en la salida del error dice: Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 25


CREATE PROCEDURE SP_FERSA_ConsultaCotizacion
(
OUT p_Producto VARCHAR(100),
OUT p_tipo VARCHAR(100),
OUT p_Frente VARCHAR(100),
OUT p_Profundidad VARCHAR(10),
OUT p_Altura VARCHAR(100),
OUT p_Piso VARCHAR(100),
OUT p_Puertas VARCHAR(100),
OUT p_Modulos VARCHAR(10)
)
BEGIN

SELECT
co.Producto,
co.Sub_Producto,
co.Frente,
co.Profundidad,
co.Altura,
co.Piso,
co.Puertas
INTO p_Producto, p_tipo, p_Frente, p_Profundidad, p_Altura, p_Piso, p_Puertas
FROM producto p INNER JOIN sub_producto sp ON p.id_prod = sp.id_prod
INNER JOIN combinaciones co ON sp.id_prod = co.id_prod -- <--Al terminar esta linea me marca el error de punto y coma
END
  #8 (permalink)  
Antiguo 08/01/2015, 09:40
 
Fecha de Ingreso: diciembre-2014
Ubicación: Guadalupe
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Error en Procedimiento Almacenado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El editor de SP es suficiente para lo que necesitas. Escribe solamente el código, dejando que el Workbench ponga el cierre. No le pongas nada más alla del END que te escribe. NADA.
Concentrate en poner los parametros del prototipo y el body, sin agregados.

El Workbench se encargará del resto.
Ya quedaron resueltos los errores lo hice con el diseñador de Workbench.

Etiquetas: almacenado, procedimiento, registro, select
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 18:14.