Case (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Case biedt een vorm van flow control. Deze komt in twee smaken:

  • Case expressie of functie
  • Case statement.

Zie pagina Programmeren (algemeen) voor het onderscheid tussen deze twee.

Merk verder op dat de bronnen meestal spreken van case terwijl je in de praktijk meestal select case ziet. Dat komt, omdat je in de praktijk de uitkomst van een case-expressie gebruikt binnen een select-statement.

Voorbeeld case-expressie met gescheiden argumenten

Dit voorbeeld sluit aan bij het eerste voorbeeld op de help-paginavan MySQL:

set @var=3;

select case @var

	when 1 then 'one'
	when 2 then 'two'
    
    else 'more'

end

Details:

  • De twee argumenten die worden vergeleken, zijn hier gesplitst: Het eerste argument wordt direct genoemd achter het keyword case, terwijl de vergelijkende argumenten verderop staan. Hieronder staat een voorbeeld met een iets andere syntaxis
  • Het voorbeeld op de helppagina gebruikt twee vaste getallen, en da's nogal simpel. Vandaar dat ik er hier een variabele van heb gemaakt.

Voorbeeld case-expressie met samengevoegde argumenten

Hetzelfde voorbeeld als hierboven, maar nu op een manier die voor mij iets herkenbaarder overkomt:

####################################################################
# Voorbeeld case-expressie met samengevoegde arguenten
####################################################################
#
set @var=3;

select case

	when @var = 1 then 'one'
	when @var = 2 then 'two'
    
    else 'more'

end;

Case-expressie zonder select

Hieraan kun je goed zien dat case een expressie is, en geen statement:

####################################################################
# Voorbeeld concat ipv. select
####################################################################
#
set @var=3;

select concat
(
	"De waarde van de variabele: ",

	 case

		when @var = 1 then 'one'
		when @var = 2 then 'two'
		else 'more'

	end
) as uitkomst;

Real-world case-expressie

Verder weinig nieuws tav. bovenstaande voorbeelden:

select
concat
(
	(
		select case

		when markt="de" then

			concat("Kohlebürsten für ", upper(tool_brand)," ",root_tmp.tool_type," ")

		when markt="es" or markt="mx" then
		
			concat("Escobillas de Carbón para ", upper(tool_brand)," ",root_tmp.tool_type," ")
            
		end
	), 
        "hoihallo"
)
as item_name;

Voorbeelden case-statement

Het case-statement kan alleen gebruikt worden binnen sprocs. De verschillen met de expressie:

  • Het statement eindigt met end case ipv. alleen end
  • Omdat dit een statement is, en geen expressie, kun je meerdere commando's incorporeren. Elk commando eindigt met een ";".
CREATE DEFINER=`root`@`localhost` PROCEDURE `case_voorbeelden`()
BEGIN

set @var=3;

case

	when @var=1 then
    
	select "Eerste statement";
        select "De waarde is één";

	when @var=2 then

    
	select "Eerste statement";
        select "De waarde is twee";

	else
    
	select "Eerste statement";
        select "De waarde is meer dan twee";

end case;    

END

Zie ook

Bronnen