MySQL - comprueba e imprime

   
Vista:
Imágen de perfil de Antonio

comprueba e imprime

Publicado por Antonio (12 intervenciones) el 13/05/2016 16:49:28
Tengo varios ejercicios que giran en torno a este y necesito ayuda gracias .

5. Cree una tabla articulos e inserta datos.
a) Construya un procedimiento que compruebe si el precio del
artículo cuyo código pasamos como parámetro es mayor que 50
euros y en caso afirmativo, imprima el nombre y el precio del
artículo por pantalla.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
create table articulos
(
codigo varchar(5) primary key,
nombre varchar(20),
precio int(11)
);
insert into articulos(codigo,nombre,precio) values
('a001','patines',80),
('a002','guantes',10),
('a003','cascos',40),
('a004','gafas',25),
('a005','rodilleras',30),
('a006','protector bucal',15),
('a007','coderas',30),
('a008','camisetas',45),
('a009','pantalones',55),
('a010','gorras',20),
('a012','botas',null);
 
 a) delimiter $$
drop procedure if exists precio_articulo
create procedure precio_articulo (250 int(3))
begin
	if(precio > 50)
		select('articulo');
	elseif(precio = yes)
		select('articulo');
	dbms_output.put_line('nombre');
	DBMS_OUTPUT.PUT_LINE(PRECIO);
 
end $$
delimiter ;

es lo que yo entiendo , pero el terminal me da error de sintaxis en línea 2 , desconozco si el resto esta bien help pls
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

comprueba e imprime

Publicado por Gonzalo (103 intervenciones) el 13/05/2016 19:28:30
Ya con esto sólo puedo decirte que una de dos, o estás posteando en el foro equivocado o estás codificando confundiendo el DBMS:

1
DBMS_OUTPUT.PUT_LINE(PRECIO);

Eso es PL/SQL, de Oracle, no es de MySQL.

¿Con cual DBMS estás trabajando realmente.
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
Imágen de perfil de Antonio

comprueba e imprime

Publicado por Antonio (12 intervenciones) el 13/05/2016 19:45:19
Es que pregunte a otro usuario sobre como imprimir , por pantalla en MYSQL y me comento eso me pareció raro , ya que nosotros en el ciclo ese comando no lo hemos visto , usamos XAMPP para MYSQL actualmente usa el motor MARIADB

Para imprimir por pantalla, en oracle se usa DBMS_OUTPUT. Pues en Mysql se hace así de simple:

1
SELECT 'Hello World!';

eso fue lo que me contesto , y , en base a eso yo realice lo que he posteado arriba , en base a lo que entiendo que me pide el ejercicio
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

comprueba e imprime

Publicado por Gonzalo (103 intervenciones) el 13/05/2016 22:03:17
Uff...!

Mira, había tantos errores que resultaba dificil saber por donde comenzar, asi que te paso el script y leugo preguta las dudas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DROP TABLE IF EXISTS articulos;
CREATE TABLE articulos (
    codigo VARCHAR(5) PRIMARY KEY,
    nombre VARCHAR(50),
    precio INT
);
 
INSERT INTO articulos(codigo,nombre,precio) VALUES
('a001','patines',80),
('a002','guantes',10),
('a003','cascos',40),
('a004','gafas',25),
('a005','rodilleras',30),
('a006','protector bucal',15),
('a007','coderas',30),
('a008','camisetas',45),
('a009','pantalones',55),
('a010','gorras',20),
('a012','botas',NULL);
 
delimiter $$
DROP PROCEDURE IF EXISTS precio_articulo$$
 
CREATE PROCEDURE precio_articulo (IN codart VARCHAR(5))
BEGIN
	IF(SELECT precio FROM articulos WHERE codigo = codart)> 50 THEN
		SELECT nombre FROM articulos WHERE codigo = codart;
	ELSE
		SELECT 'No se encontraron articulos con el precio definido';
	END IF;
 
END $$
delimiter ;

Y para ejecutarlo, tienes que llamar al SP pasandole el codigo, por ejemplo:

1
CALL precio_articulo('a009');
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antonio

comprueba e imprime

Publicado por Antonio (12 intervenciones) el 14/05/2016 00:33:58
Vale gracias , el problema no está en saberlo hacer o no , que muchas veces sí sabemos , está en entender y en este caso así ha sido ... Que yo sepa imprimir NO es sinónimo de Seleccionar/Visualizar -en Java por ejemplo imprimir , sabes que antes o después tienes que morir en un print , hasta donde llegan mis conocimientos - , sí dice imprimir yo pienso en muchas cosas menos en hacer un SELECT , por otra parte en pasar parámetro sí dice , cuyo código ' el cual puede ser alfanumérico o numérico sólo' no pienso en poner algo alfabético como tú , muchas gracias por la ayuda .
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

comprueba e imprime

Publicado por Gonzalo (103 intervenciones) el 14/05/2016 01:07:40
Que yo sepa imprimir NO es sinónimo de Seleccionar/Visualizar -en Java por ejemplo imprimir , sabes que antes o después tienes que morir en un print

Bueno, allí está tu primer error...
JAVA es un lenguaje de programación, el SQL no lo es, es un lenguaje de consultas.
Son universos y entornos de existencia diferentes.

El SQL recibe peticiones de búsqueda de datos y devuelve tablas de resultados, no hace procesos ni genera streams. No es su responsabilidad mas que procesar los datos, y eso lo hace con los recursos que tiene programados el DBMS.
Y MySQL no emite salidas impresas por pantalla, eso lo hacen las aplicaciones. Solo puede devolver resultados de un SELECT en un formato de tabla.

Cuando Oracle lo hace, en realidad lo hace volcando a un archivo, o bien al spool, pero tampoco imprime por si mismo, sino que deriva esa responsabilidad a otras rutinas programadas que se encargan de interpretar la salida.
El SQL puro de Oracle también devuelve tablas de datos.


Cuando trabajas en SQL no puedes pensar ni en procesos ni en resultados de programación. Debes pensar en estructuras de datos y condiciones de resultados, condiciones que surgen de lógica proposicional.

Una de las primeras lecciones que te enseñan en la cátedra de Bases de Datos en la universidad es precisamente que no puedes pensar como programador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antonio

comprueba e imprime

Publicado por Antonio (12 intervenciones) el 14/05/2016 10:35:38
Pero no se supone los 'if' y 'else' son de programación yo al menos , sólo los he visto en Java ...
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

comprueba e imprime

Publicado por Gonzalo (103 intervenciones) el 14/05/2016 14:59:45
Son lenguaje procedural, está dentro de las definiciones del estandar ANSI-92, y su objetivo es un lenguaje de procedimientos en SQL para realizar conjuntos de tareas EN la base de datos, sin interacción con las aplicaciones (estas pueden invocarlos o recibir resultados de ellos por medio de las mismas librerías de acceso a datos, pero no interactuan dentro de ellos, ya que son invisibles).

NO confundas el T-SQL, PL/SQL y los PL de MySQL y PostgreSQL con lenguajes de programación de aplicaciones con Java, PHP, C# y demás...
Una cosa es programar una aplicación web y otra muy diferente crear rutinas almacenadas que sólo existen dentro de una BBDD determinada.

Como todo lenguaje con reglas, posee derivadores de flujo, tales como los IF y CASE. Pero una cosa MUY IMPORTANTE que debes tener claro es que NO EXISTE un estándar del lenguaje procedural, por lo que un SP escrito para Oracle es incompatible para MySQL, DB2; Firebird o SQL Server, y viceversa.
Lo mismo pasa con muchas funciones nativas, que existen solo en uno, de los DBMS, o bien no se usan de la misma forma en otro (cuando existe uno con igual nombre). Un ejemplo de esto es CONCAT() entre Oracle y MySQL, o CONVERT y CAST.
Solo las funciones incluidas en el estándar de SQL, como YEAR(), DATE(), DAY, MONTH(), TIME() y cosas así, se usan del mismo modo en todos los DBMS.
Las diferencias entre DBMS en muchos detalles son significativas, y pueden causar serias confusiones cuando pasas de uno a otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar