MySQL: lietotāja definētie mainīgie SQL vaicājumā
Šoreiz mana interese krita tieši uz lietotāja definētiem mainīgiem. Nosacīti tos var iedalīt divās kategorijās: definētie mainīgie, ko izmanto procedūrās un funkcijas un nedefinēti, ko arī izmanto procedūrās un funkcijās, bet var tikt izmantoti SQL vaicājumā, kā sakās „in-line”.
Par mainīgiem iekš MySQL. Ir vairāku tipu mainīgie, ko var izmantot un dažkārt arī mainīt to vērtības: servera mainīgie, sesijas mainīgie, statusa mainīgie, lietotāja definētie mainīgie.
Ar MySQL sastopamiem mainīgiem var iepazīties šeit:
http://dev.mysql.com/doc/refman/5.0/en/mysqld-server.html
Šoreiz mana interese krita tieši uz lietotāja definētiem mainīgiem. Nosacīti tos var iedalīt divās kategorijās: definētie mainīgie, ko izmanto procedūrās un funkcijas un nedefinēti, ko arī izmanto procedūrās un funkcijās, bet var tikt izmantoti SQL vaicājumā, kā sakās „in-line”.
Definētie mainīgie: DECLARE vards VARCHAR(10); vai DECLARE done INT DEFAULT 0; tālāk šādam mainīgam var piešķir vērtību SET name := „tests”; un izmantot SQL vaicājumos: SELECT id FROM my_table WHERE name = vards;
Tiesa viss tas ir funkcijas / procedūras ietvaros.
Nedefinētie mainīgie, jeb mainīgie ar nedefinēto datu tipu:
Vērības piešķiršanai lieto šādi: SET @my_variable=123; šāda tipa mainīgos var izmantot arī SQL vaicājumos, piemēram: SELECT @a:=123, @b:=@a+321;
vai kombinējot:
mysql> SET @t1=0, @t2=0, @t3=0; mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
Šos mainīgos nevajadzētu lietot vaicājumos, kuros izmanto grupēšanu (GROUP BY, HAVING), jo rezultāts var būt ne tuvu tāds, kā gaidīts.
Mainīgo „redzamība” ir sesijas ietvaros. Tas nozīmē, ka tie ir izolēti no citām sesijām. Arī no secīgām sesijām, ja tās ir pārtrauktas.
Vairāk lasāms šeit:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Mainīgā ar nedefinēto tipu lietojuma paraugs:
SELECT @rate:=(SELECT c.rate FROM currencies c WHERE c.currID = itemsPrices.currID ORDER BY c.date DESC LIMIT 1) as rate, price1LVL, price1LVL / @rate as price1, price2LVL, price2LVL / @rate as price2, price3LVL, price3LVL / @rate as price3 FROM itemsPrices
Dažās pārdomās par mainīgā veidošanu:
Par šo tēmu ir sarakstītas biezas grāmatas un pamācības. Bet naivi cerēt, ka kāds būtu tās aizrautīgi lasījis. Tiesa gan, pie zināmas attīstības stadijas programmēšanā, rodas vēlme kodu padarīt kaut cik lasāmu un vieglāk uztveramu un mainīgo „izskatas” (garums un semantiskā jēga) ir viens no veidiem.
MySQL tutoriāļos atrodams, ka mainīgais tiek veidos „nekā īpaši” – tā ir latīņu mazo burtu virkne. Nedefinētos mainīgos var atšķirt pēc @ zīmes tā priekšā, savukārt definētiem mainīgiem šīs pazīmes jāizdomā pašam.
Piemērs: DECLARE thisismyfirstvariable; DECLARE this_is_my_first_variable; DECLARE thisIsMyFirstVariable; DECLARE _ThisIsMyFirstVariable;
komentāri