sql >> Databasteknik >  >> RDS >> Mysql

@-symbol i lagrad procedur?

@variable syntax i MySQL anger en användardefinierad sessionsvariabel. Du kan ställa in dessa användarvariabler utanför en lagrad procedur, men du kan också ställa in dem i en lagrad procedur, och effekten är att variabeln behåller värdet efter att ditt proceduranrop återkommer.

Så i ditt exempel skulle följande också göra samma sak:

CREATE PROCEDURE emp_count_2()
BEGIN
 SELECT COUNT(*) INTO @empCount FROM Employee;
END

CALL emp_count_2(); /* sets @empCount as a side-effect */
SELECT @empCount;

Det är okej för flera sessioner att ställa in användarvariabeln på det här sättet samtidigt, eftersom användarvariabler är omfångade till en enda session, och samtidiga sessioner kan ha variabler med samma namn, men med olika värden.

Variabelsyntaxen utan @-prefix är för variabler som är lokala för proceduren, antingen procedurparametrar eller även lokala variabler deklarerade med DEKLARERA inom förfarandeorganet.

Denna användning du har, att skicka en användarvariabel som en parameter och tilldela den i procedurens brödtext, är användbar om du vill anropa en procedur flera gånger och lagra resultatet i separata användarvariabler. Annars skulle varje anrop till proceduren skriva över det föregående värdet i användarvariabeln @empCount för den aktuella sessionen.




  1. Hur COERCIBILITY() fungerar i MariaDB

  2. OdbcConnection returnerar kinesiska tecken som ?

  3. Hur man gör detta i Laravel, underfråga var i

  4. ta bort länk tar inte bort någon post i mysql-databasen