Mysql if-then nem működik

Mysql if-then nem működik
2011-10-18T22:32:40+02:00
2011-10-19T09:49:39+02:00
2022-11-23T09:50:40+01:00
SLOBY
Sziasztok,

Egy select -> insert lekérdezést szeretnék végrehajtani, de egyszerűen nem sikerül, minden IF THEN-t szintaktikai hibával eldobál a MySQL.

IF ISNULL(55) THEN
SELECT 'NULL';
ELSE SELECT '55';
END IF;

Nyilván nem ezt akarom lekérdezni, ennél jóval bonyolultabb, de már ennél is hibát dob.

Egyszerűsítem a dolgot:

IF 1=1 THEN
SELECT 1;
END IF;


Hiba és hiba.

MS SQL-es hátterem van, sok sok ezer sornyi tárolt eljárással a hátam mögött és sokszor már nevetségesnek tartom a mysql fogyatékosságait és semmit nem mondó hibaszövegeit.

SQL Manager 2010 Lite for MySQLben próbálkoztam, eddig teljesen jól működött.
Mutasd a teljes hozzászólást!
Az általad idézet if-es szerkezet csak tárolt eljárásra vonatkozik. Sima lekérdezésben az itt leírt szerkezetek használhatóak.

De ez ugyebár le van írva a mysql kézikönyvében

This section describes the syntax for the BEGIN ... END compound statement and other statements that can be used in the body of stored programs: Stored procedures and functions, triggers, and events. These objects are defined in terms of SQL code that is stored on the server for later invocation


Idézet innen, és a linkelt oldalon a 12.7.6. Flow Control Constructs alatt található az általad idézett if szerkezet.
Mutasd a teljes hozzászólást!

  • Kiindulásképp:

    DROP PROCEDURE IF EXISTS test1; DELIMITER // CREATE PROCEDURE test1() BEGIN IF 1=1 THEN SELECT 1; END IF; END // DELIMITER ; CALL test1();

    Te hogy próbáltad?
    Mutasd a teljes hozzászólást!
  • 1. delimiter jól van beállítva?
    2. a kérdéses utasítást ugye tárolt eljárásban használtad és nem egy sima lekérdezésen belül?
    Mutasd a teljes hozzászólást!
  • MS SQL-es hátterem van, sok sok ezer sornyi tárolt eljárással a hátam mögött és sokszor már nevetségesnek tartom a mysql fogyatékosságait és semmit nem mondó hibaszövegeit.


    Egy halk megjegyzés: az ms sql az ms sql és nem mysql. Attól, hogy bizonyos dolgokat a mysql-ben máskép kell megcsinálni, mint ms sql-ben, még nem lesz a mysql "nevetséges", csak egyszerűen sok-sok évnyi ms sql-ezésben szerzett megszokás a mysql-ben nem használható.
    Mutasd a teljes hozzászólást!
  • Csak a dolgok tisztázása képpen.

    MySQLben nem lehet ilyen Ad hoc összeállított utasításokat készíteni?

    Tárolt eljárásban működik, de itt most pont nem ez volt a célom. MS SQL-ben ez (megfelelő szintaxisra átalakítva) simán lefut.

    Ha jól sejtem, ez megint egy MySQL sajátosság mint a Check constraintek vagy a nullázható SP paraméterek hiánya
    Mutasd a teljes hozzászólást!
  • Csak azért írtam, hogy ne feltételezzétek, hogy tegnap láttam először selectet :)
    MySQLeztem is régebben, de mikor az alapok is kifognak rajtam és egy 2 perces problémából lesz 30, akkor már kiakadok.
    Mutasd a teljes hozzászólást!
  • Az általad idézet if-es szerkezet csak tárolt eljárásra vonatkozik. Sima lekérdezésben az itt leírt szerkezetek használhatóak.

    De ez ugyebár le van írva a mysql kézikönyvében

    This section describes the syntax for the BEGIN ... END compound statement and other statements that can be used in the body of stored programs: Stored procedures and functions, triggers, and events. These objects are defined in terms of SQL code that is stored on the server for later invocation


    Idézet innen, és a linkelt oldalon a 12.7.6. Flow Control Constructs alatt található az általad idézett if szerkezet.
    Mutasd a teljes hozzászólást!
  • Én évek óta mysql-t használok inkább és csak néha-néha ms sql-t. Amit pár perc alatt megoldok mysql-ben, azzal néha órákig szenvedek ms sql-ben (pl. nem tudom felfogni, hogy miért nincs egy normális group_concat benne...). Mivel mysql alatt tudom hova kell nyúlni, hol kell keresni, milyen hiba állhat egy-egy hibaüzenet mögött. ms sql-nél nem tudom még ezeket. De ezért nem az ms sql-t hibáztatom...
    Mutasd a teljes hozzászólást!
  • Szerintem azt szeretné tudni a kérdező olvtárs, hogy van-e MySql-ben olyasmi, mint az Oracle-ban a névtelen PL/SQL blokk:

    BEGIN ...PL/SQL utasítások... END;

    vagy
    DECLARE ... változódeklarációk ... BEGIN ...PL/SQL utasítások... END;
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd