2014-12-15 12 views
6

Używam H2 (z trybem zgodności MySQL) do napisania testów automatycznych przeciwko naszemu oprogramowaniu wykorzystującemu MySQL. Niestety, wygląda na to, że H2 nie ma funkcji IF, której używa wiele naszych zapytań. Skoro nie przepisujemy naszych zapytań dotyczących aplikacji za pomocą czegoś takiego jak DECODE, czy jest to dobry sposób na stworzenie funkcji if, powiedzmy jako Alias?Funkcja IF w H2 dla kompatybilności MySQL

Błąd, który dostaję:

WARNING: Failed to execute: SELECT IF(true,'TRUE!!','FALSE!!!') because: Function "IF" not found; SQL statement: 

Odpowiedz

3

Skończyło się tylko przepisywania zapytań do korzystania z funkcji kompatybilny zarówno z bazy danych MySQL - H2. W moim przypadku funkcje, o których mowa, zostały zastąpione przez IFNULL.

+2

'CASEWHEN' to kolejna alternatywa, którą myślę. – px5x2

+0

CASEWHEN jest poprawny, dziękuję! –

1

Tak można utworzyć jeśli czynność jako alias:

CREATE ALIAS IF NOT EXISTS `IF` AS $$ 
    String ifFunction(boolean condition, String exp1, String exp2){ 
     if(condition) { 
      return exp1; 
     } else { 
      return exp2; 
     } 
    } 
$$; 
+0

Dzięki, działa to dla ciągów. Potrzebuję IF dla ciągów i liczby. Napisałem nowe pytanie: http://stackoverflow.com/questions/37595970/create-alias-which-works-for-strings-and-numbers-in-h2 –

2

Właśnie miał ten sam problem, i postanowiłem go CASE/WHEN/THEN SQL. Więc można przepisać zapytanie następująco:

SELECT CASE WHEN true THEN 'TRUE!!' ELSE 'FALSE!!!' END; 

Z pewnością jest to bardziej rozwlekły, ale pasuje zarówno H2 i MySQL.