You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
10 Hrs
46 Min
31 Seg

Crea tus primeras Stored Procedures

28/34
Resources

Contributions 11

Questions 0

Sort by:

Want to see more contributions, questions and answers from the community?

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);`
`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;`

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

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 “DELIMITER //” y “//”. Luego podemos volver a cambiar el delimitador a “;” simplemente utilizando “DELIMITER ;” 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 $$