MySQL - Crear Procedures

 
Vista:
sin imagen de perfil

Crear Procedures

Publicado por Elena (3 intervenciones) el 26/05/2015 20:17:58
Buenas tardes amores , abro este tema para que me resuelvan sin son tan amables unas procedures que tengo que entrar en la base de datos y nose como se hacen , he creado mis tablas en la base de datos y he intentado hacer por todos los medios las procedures y no soy capaz de hacerlas:

Quiero hacer estos enunciados.


HACER UN PROCEDIMIENTO QUE LLENE EL TELEFONO DE LOS CLIENTES DE LA SIGUIENTE FORMA:
CADA TELEFONO ESTARA COMPUESTO POR 924- A CONTINUECION SE REPETIRA EL CODIGO DEL CLIENTE HASTA COMPLETAR LOS 10 CARACTERES . POR EJEMPLO PARA EL CLIENTE 16 SERIA:
924-161616


Mis tablas son:

Clientes:

c_cliente
n_cliente
dir_cliente
tel_cliente

Facturas:

c_factura
c_cliente
importe
fecha_factura

pedidos:

c_pedido
c_cliente
fecha_pedido
c_factura

productos:

c_producto
n_producto
precio

productos_pedidos:

c_producto
c_pedido
unidades
precio



NECESITO AYUDAAA GRACIAS

MUCHAS GRACIAS , Besitos !!
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Crear Procedures

Publicado por leonardo_josue (414 intervenciones) el 26/05/2015 20:48:26
Hola Elena:

¿Qué ayuda necesitas? es decir, ¿en qué tienes problemas o qué parte del procedimiento no puedes realizar?

Supongo que intentaste hacer algo verdad?... en ese caso comienza por postear lo que intentaste hacer y con gusto te ayudamos a completarlo o corregirlo.

De todas tus tablas en realidad sólo necesitas la de CLIENTES. Si ya tienes información capturada, lo que tienes que hacer es simplemente un UPDATE a la tabla, calculando el teléfono que le corresponde. Si no tienes información, entonces tienes que hacer un procedimiento para INSERTAR los datos del cliente, igualmente CALCULANDO el teléfono que le corresponde.

hay muchas formas de hacer lo que quieres..., con ciclos, utilizando funciones de cadena, o de manera "manual"...

En realidad todo consiste en determinar la longitud del número de cliente para saber cuantas veces tienes que concatenarlo para completar la longitud de 10...

Otra idea es formar una cadena lo suficientemente grande por ejemplo con la función REPEAT y después tomar sólo los caracteres que necesitas, por ejemplo con la función LEFT.

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html

es decir, opciones tienes muchas de donde escojer... INTENTA hacerlo y nos comentas los resultados.

Saludos
Leo.
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
sin imagen de perfil

Crear Procedures

Publicado por Elena (3 intervenciones) el 26/05/2015 21:17:27
Hola Leo , si lo he intentado , pero nose como hacer el esquema mental ni nada , nose como empezar se solo los comandos básicos que se utilizan para cualquier procedure , si me plantease el esquema , y me lo explicase a lo mejor lo entenderia mejor , muchas gracias
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Crear Procedures

Publicado por leonardo_josue (414 intervenciones) el 26/05/2015 21:39:44
Hola de nuevo Elena:

1
2
pero nose como hacer el esquema mental ni nada , nose como empezar se solo los comandos básicos
que se utilizan para cualquier procedure

Puedes comenzar por leer con detenimiento la liga que te pasé y analizar las funciones que ahí aparecen... ¬¬

Mucho ojo, no esperes en este foro encontrar una solución sólo para copiar y pegar, sino que esperamos que al menos pruebes algunas de las cosas que te damos como apoyo... no se vale eso de decir que no tienes ni idea de qué hacer.

El problema es bastante claro, el teléfono comienza con 924-, por lo tanto, lo primero que tienes que hacer es seleccionar esa cadena:

1
2
3
4
5
6
7
mysql> SELECT '924-' telefono;
+----------+
| telefono |
+----------+
| 924-     |
+----------+
1 row in set (0.00 sec)

Te comenté en el post: el truco está en concatenar n veces el número de cliente (utilizando repeat) y seleccionando sólo los primeros dígitos:

1
2
3
4
5
6
7
8
9
10
mysql> set @c_cliente = '16';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT CONCAT('924-', REPEAT(@c_cliente, 10)) telefono;
+--------------------------+
| telefono                 |
+--------------------------+
| 924-16161616161616161616 |
+--------------------------+
1 row in set (0.06 sec)

El código de cliente puede tener una longitud de al menos 1 dígito, pero puede ser mayor... en el ejemplo concateno 10 VECES el código del cliente al código inicial... como la longitud de mi cadena es de 2 dígitos, entonces me queda un teléfono MUY GRANDE... si sólo necesitas los primeros 10 caracteres entonces UTILIZAS LA FUNCION LEFT que también te comenté en mi post anterior:

1
2
3
4
5
6
7
mysql> SELECT LEFT(CONCAT('924-', REPEAT(@c_cliente, 10)), 10) telefono;
+------------+
| telefono   |
+------------+
| 924-161616 |
+------------+
1 row in set (0.00 sec)

¿Complicado?... mmm no lo creo. Esto lo tienes que convertir para que tome los datos de tu tabla y no un id fijo como lo tengo... si ya sabes las intrucciones básicas para meterlo en un Procedimiento Almacenado, no deberías tener problemas.

Saludos
Leo
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
sin imagen de perfil

Crear Procedures

Publicado por Elena (3 intervenciones) el 27/05/2015 22:11:42
hola leo , no sabrias con exactitud la procedure , pongo lo que me pusistes pusiendo esto:

delimiter //
create procedure numerostelefono()

begin

SELECT LEFT(CONCAT('924-', REPEAT(@c_cliente, 10)), 10) as numeros , tel_cliente from clientes;

UPDATE Coches set WHERE tel_cliente = 'null';

end
//
delimiter ;



Haber si sabes poque , he estado viendo los tutoriales que me has pasado y lo maximo qe he podido hacer ha sido esto y me da error , nose que mas puedo hacer , le he estado dando vueltas toda la tarde y nada me sigue dando error :S

Gracias por todo !! besos
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Crear Procedures

Publicado por leonardo_josue (414 intervenciones) el 28/05/2015 16:17:53
Hola de nuevo Elena:

1
2
3
he estado viendo los tutoriales que me has pasado y lo maximo qe he podido hacer ha sido esto y me
da error , nose que mas puedo hacer , le he estado dando vueltas toda la tarde y nada me sigue dando
error :S

No vasta con ver los tutoriales, hay que leernos y analizarlos a conciencia, porque es claro que no te has tomado el tiempo suficiente y estás cometiendo errores infantiles.

Primero, copiaste el ejemplo del SELECT tal como lo puse, sin darte siquiera tiempo para notar que @c_cliente ES UNA VARIABLE QUE YO CREO A MODO DE EJEMPLO:

1
mysql> set @c_cliente = '16';

Segundo... ¿has hecho alguna vez un UPDATE común y corriente? tú estás poniendo esto:

1
UPDATE Coches set WHERE tel_cliente = 'null';

Por un lado en el SELECT hablas de la tabla CLIENTES pero estás tratando de actualizar la tabla COCHES... ???

Enseguida, tienes la palabra reservada SET, pero NO ESTÁS DICIENDO QUÉ ES LO QUE SE TIENE QUE ACTUALIZAR... te recuerdo que la sintaxis del UPDATE es así:

1
UPDATE tabla SET campo1 = 'valor', campo2 = 2, campo3 = 'lo que sea' ....... WHERE condición


es decir, después del SET debes colocar aquellos campos que quieres actualizar y el nuevo valor que se va a asignar.

Te recomiendo que te tomes tu tiempo para leer cualquier libro de SQL para principiantes, si no sabes hacer esto que es básico, no creo que puedas hacer nada más avanzado.

Saludos
Leo.
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