Utilizarea procedurilor stocate „if” și „else” MySQL (Programare, Mysql, Bază De Date, Proceduri Stocate, Declarație If)

Raúl Núñez Cuevas a intrebat.

Am unele dificultăți atunci când încerc să creez această procedură stocată, orice fel de ajutor este binevenit:

create procedure checando(in nombrecillo varchar(30), in contrilla varchar(30), out resultado int)

begin 

if exists (select * from compas where nombre = nombrecillo and contrasenia = contrilla) then
    set resultado = 0;
else if exists (select * from compas where nombre = nombrecillo) then
    set resultado = -1;
else 
    set resultado = -2;
end if;
end;

Tabelul pe care lucrez este:

+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| Nombre      | varchar(30) | YES  |     | NULL    |       |
| contrasenia | varchar(30) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+

Comentarii

  • +1 por los nombrecillos –  > Por roy.
3 răspunsuri
Bohemian

Problema este că fie nu ai închis if fie ai nevoie de un elseif:

create procedure checando(
    in nombrecillo varchar(30),
    in contrilla varchar(30), 
    out resultado int)
begin 

    if exists (select * from compas where nombre = nombrecillo and contrasenia = contrilla) then
        set resultado = 0;
    elseif exists (select * from compas where nombre = nombrecillo) then
        set resultado = -1;
    else 
        set resultado = -2;
    end if;
end;

Octavian Vladu

Eu cred că această construcție: if exists (select... este specifică pentru MS SQL. În MySQL EXISTS predicate îți spune dacă subinterogarea găsește vreun rând și se folosește astfel: SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

Puteți rescrie liniile de cod de mai sus astfel::

DELIMITER $$

CREATE PROCEDURE `checando`(in nombrecillo varchar(30), in contrilla varchar(30), out resultado int)

BEGIN
    DECLARE count_prim INT;
    DECLARE count_sec INT;

    SELECT COUNT(*) INTO count_prim FROM compas WHERE nombre = nombrecillo AND contrasenia = contrilla;
    SELECT COUNT(*) INTO count_sec FROM FROM compas WHERE nombre = nombrecillo;

    if (count_prim > 0) then
        set resultado = 0;
    elseif (count_sec > 0) then
        set resultado = -1;
    else 
        set resultado = -2;
    end if;
    SELECT resultado;
END

Comentarii

  • @Bohemian a spus că puteți folosi elif. Mă întreb unde poate cineva să găsească mai multe informații despre elif în MySQL. Bash? –  > Por Octavian Vladu.
Extreme

se poate folosi CASE WHEN ca urmare ca să obțineți ca IF ELSE.

SELECT FROM A a 
LEFT JOIN B b 
ON a.col1 = b.col1 
AND (CASE 
        WHEN a.col2 like '0%' then TRIM(LEADING '0' FROM a.col2)
        ELSE substring(a.col2,1,2)
    END
)=b.col2; 

p.s:în caz că cineva are nevoie de acest mod.