Autor Tema: procedimiento almacenado mysql  (Leído 19559 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado froilan

  • Sv Member
  • ***
  • Mensajes: 333
procedimiento almacenado mysql
« : abril 05, 2010, 07:40:13 pm »

bueno la cosa es que  no puedo hacer esto en mysql:

5.   Elabore un procedimiento almacenado que defina las comisiones otorgadas por una venta realizada. Recibiendo como parámetros de entrada el importe de la venta. Devolviendo las comisiones por la venta, las cuales se calcularan por medio del 15% sobre la venta


info:
tengo estas tablas

CREATE TABLE `comisiones` (
  `id_vendedor` INT(11) NOT NULL,
  `comisiones` DECIMAL(15,2) DEFAULT NULL,
  PRIMARY KEY (`id_vendedor`),
  CONSTRAINT `comisiones_ibfk_1` FOREIGN KEY (`id_vendedor`) REFERENCES `vendedores` (`id_vendedor`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE `productos` (
  `id_producto` INT(11) NOT NULL,
  `descripcion` VARCHAR(25) DEFAULT NULL,
  `proveedor` VARCHAR(25) DEFAULT NULL,
  `precio` DECIMAL(15,2) DEFAULT NULL,
  PRIMARY KEY (`id_producto`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE `vendedores` (
  `id_vendedor` INT(11) NOT NULL,
  `nombres` VARCHAR(25) DEFAULT NULL,
  `apellidos` VARCHAR(25) DEFAULT NULL,
  `fechaNac` DATE DEFAULT NULL,
  `departamento` VARCHAR(25) DEFAULT NULL,
  PRIMARY KEY (`id_vendedor`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE `ventas` (
  `id_vendedor` INT(11) NOT NULL DEFAULT '0',
  `id_producto` INT(11) NOT NULL DEFAULT '0',
  `importe` DECIMAL(15,2) DEFAULT NULL,
  `cantidad` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id_vendedor`,`id_producto`),
  KEY `id_producto` (`id_producto`),
  CONSTRAINT `ventas_ibfk_1` FOREIGN KEY (`id_vendedor`) REFERENCES `vendedores` (`id_vendedor`),
  CONSTRAINT `ventas_ibfk_2` FOREIGN KEY (`id_producto`) REFERENCES `productos` (`id_producto`)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

muchas gracias por tomarse el tiempo de leer y muchas gracias

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:procedimiento almacenado mysql
« Respuesta #1 : abril 05, 2010, 07:48:03 pm »
hola! como estas, fijate que aqui no hacemos tareas gratis :) te puedo sugerir que busques en google ya que es una funcionalidad relativamente comun.

me tome la libertad de buscarte la info en google y encontre un manual de referencia del fabricante de mysql :)
http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html
date gusto con la lectura :)

Desconectado froilan

  • Sv Member
  • ***
  • Mensajes: 333
Re:procedimiento almacenado mysql
« Respuesta #2 : abril 05, 2010, 08:14:07 pm »
Citar
hola! como estas, fijate que aqui no hacemos tareas gratis :) te puedo sugerir que busques en google ya que es una funcionalidad relativamente comun.

no viejo disculpame no e peido que me lo hagan simplemente que me den un ejemplo pero muchas gracias voy a leer...

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:procedimiento almacenado mysql
« Respuesta #3 : abril 06, 2010, 08:56:22 am »
matizando un poco las palabras de g00mba; cual es el "error" que tenés?...

en tu primer post, no esta claro lo que querías; yo igual que g00mba supuse que querías que hicieramos tu tarea.....

ejemplos de procedures hay muchos en google, regresa cuando tengas un problema específico :thumbsup:
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re:procedimiento almacenado mysql
« Respuesta #4 : abril 06, 2010, 09:00:38 am »
este seria bueno q pusieras el codigo para revisarlo y medio orientarte. porq claro no hacemos tareas lol

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re:procedimiento almacenado mysql
« Respuesta #5 : abril 06, 2010, 09:17:40 am »

Ejemplo sencillo con parametro:
---------------------------
DELIMITER $$
USE `bd`$$
DROP PROCEDURE IF EXISTS `cuadrado`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `cuadrado`(IN numero INTEGER)
SELECT numero*numero$$
DELIMITER ;

ejemplo consulta
-------------------
USE `bd`$$
DROP PROCEDURE IF EXISTS `select_all`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `select_all`()
SELECT * FROM tabla$$
DELIMITER ;

llamandolo desde MYSQL
----------
CALL cuadrado(5)

por si lo llamas desde un lenguaje por ejemplo java

java.sql.CallableStatement cs=obj.conn.prepareCall("{call nombre procedimineto()}");

al menos en el administrador grafico de Mysql que tengo basta con solo colocar CREATE PROCEDURE nombre()  SELECT * from tabla y ejecutarlo para que me cree lo que te pongo arriba.

Espero te sirva en algo.

Desconectado froilan

  • Sv Member
  • ***
  • Mensajes: 333
Re:procedimiento almacenado mysql
« Respuesta #6 : abril 06, 2010, 09:59:25 am »
fijnse que me dieron como ejemplo esto

DELIMITER //
CREATE PROCEDURE calcular_importe (IN idproducto INT, IN cant INT, OUT importe_calculado DECIMAL(15,2))
BEGIN
   SELECT (productos.precio*cant) INTO importe_calculado
   FROM productos
   WHERE idproducto=productos.id_producto;
END;//

luego dijo lo siguiente:
Si es así debe elaborar un procedimiento almacenado que reciba como parametros de entrada el valor de la venta y este debe retornar las comisiones asignadas que son el 15% sobre la venta realizada. En este caso no debería de utilizar ninguna tabla en el cuerpo del procedimiento almacenado, la siguiente linea realizaria lo deseado:
 
  SET <parametro que devolvera el procedimiento almacenado> = <parametro que recibio el valor de la venta> * 0.15;


pero la cosa es que al ejemplo lo entiendo pero no habia visto el "SET" y no se donde uvicarlo

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14587
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:procedimiento almacenado mysql
« Respuesta #7 : abril 06, 2010, 02:22:30 pm »
creo que tu problema no es de sintaxis, creo que es conceptual. la idea es bien sencilla, un procedimiento alamacenado es una simple cadena de comandos sql envuelta en una orden para que sea guardado y llamado a posteridad. NO te vamos a poner la sintaxis solo de copy paste, intenta hacer algo por tu cuenta y te hacemos observaciones, por mas que pongas el problema y el ejemplo, hace algo primero.