No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Bases de Datos con MySQL y MariaDB

Curso de Bases de Datos con MySQL y MariaDB

Carlos Eduardo G贸mez Garc铆a

Carlos Eduardo G贸mez Garc铆a

Crea tus primeras Stored Procedures

28/34
Recursos

Aportes 11

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Otra forma de aplicar IF ELSE:

SELECT
	ST_Distance_Sphere(station_one, station_two) / IF(meters, 1, 1000) AS distance;

C谩lculo de distancia por nombre de las estaciones, optimizado la l贸gica requerida

USE metro_cdmx;

DELIMITER //
CREATE PROCEDURE TEST(IN stationName1 VARCHAR(50), IN stationName2 VARCHAR(50), IN itsInKilometers BOOLEAN)
BEGIN
    DECLARE response FLOAT;
    SET response = (
        SELECT ST_Distance_Sphere(
            (
                SELECT `locations`.`location`
                FROM `locations`
                INNER JOIN `stations`
                ON `stations`.`id` = `locations`.`station_id`
                WHERE `stations`.`name` COLLATE utf8mb4_unicode_ci = stationName1
            ),
             (
                SELECT `locations`.`location`
                FROM `locations`
                INNER JOIN `stations`
                ON `stations`.`id` = `locations`.`station_id`
                WHERE `stations`.`name` COLLATE utf8mb4_unicode_ci = stationName2
             )
        ) AS distances
    );
    IF itsInKilometers THEN
        SET response = (response/1000);
    END IF;
    SELECT response;
END //

Y para invocar en la c贸nsola

CALL TEST('Eugenia', 'Tepito', 0);

Calcula la distancia ingresando el NOMBRE DE LAS ESTACIONES en metros o en kil贸metros.

Aca esta el texto para llamar el Store Procedure: `CALL calculate_distance_between_lines( POINT(-58.99889988, -48.99889988), POINT(-98.99889988, -78.99889988), true);`

Variables y Par谩metros tipo In, Out e INOUT

```js CALL calculate_distance_between_lines( POINT(-58.99889988, -48.99889988), POINT(-98.99889988, -78.99889988), true); ```CALL calculate\_distance\_between\_lines( POINT(-58.99889988, -48.99889988), POINT(-98.99889988, -78.99889988), true);

Me anime a hacer el procedure asi con la consulta de la clase pasada, les muestro como queda
enamorao de las bases de datos c:



Aparecio un error de collate pero se soluciono con esa linea extra despues de where

`DROP PROCEDURE IF EXISTS calculates_distance_between;` `DELIMITER $$` `create procedure ` `calculates_distance_between(` `in station_one point,` ` in station_two point)` `BEGIN` `select ST_Distance_Sphere(` `station_one,` `station_two` `) / 1000 as distancia;` `END;`

La palabra reservada DELIMITER de mysql se utiliza para cambiar el s铆mbolo que el motor de mysql utilizar谩 para interpretar el final de una sentencia SQL. Por defecto se utiliza el s铆mbolo 鈥;鈥 sin embargo, en la definici贸n de un bloque de c贸digo de SQL, por ejemplo para crear procedimientos almacenados, conviene cambiar este delimitador a cualquer otro s铆mbolo como puede ser 鈥//鈥 . Esto sirve para indicarle a mysql que debe compilar todo el bloque de c贸digo comprendido entre 鈥淒ELIMITER //鈥 y 鈥//鈥. Luego podemos volver a cambiar el delimitador a 鈥;鈥 simplemente utilizando 鈥淒ELIMITER ;鈥 para seguir con sentencias normales.

USE metro_cdmx;

DELIMITER //
CREATE PROCEDURE calculate_distance_between_lines(
    IN station_one POINT,
    IN station_two POINT
)
BEGIN

    SELECT
    ST_Distance_Sphere(station_one, station_two) AS distance;

END //

DELIMITER ;

Si alguien le da un error al mometo de poner : DELIMITER // , pueden probar otra manera que es: DELIMITER $$