sql >> Database teknologi >  >> RDS >> Mysql

@ symbol i lagret procedure?

@variable syntaks i MySQL angiver en brugerdefineret sessionsvariabel. Du kan indstille disse brugervariable uden for en lagret procedure, men du kan også sætte dem inde i en lagret procedure, og effekten er, at variablen beholder værdien efter dit procedurekald vender tilbage.

Så i dit eksempel ville følgende også gøre det samme:

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 er okay for flere sessioner at indstille brugervariablen på denne måde samtidigt, fordi brugervariabler er omfattet af en enkelt session, og samtidige sessioner kan have variabler af samme navn, men med forskellige værdier.

Variabelsyntaksen uden @-præfiks er for variabler, der er lokale for proceduren, enten procedureparametre eller lokale variabler erklæret med ERKLÆR inden for procedureorganet.

Denne brug, du har, ved at sende en brugervariabel som en parameter og tildele den i procedurens brødtekst, er nyttig, hvis du vil kalde en procedure flere gange og gemme resultatet i separate brugervariable. Ellers ville hvert kald til proceduren overskrive den forrige værdi i @empCount-brugervariablen for den aktuelle session.




  1. Autogenerer sammensat nøgle i SQLite

  2. En god reference til Oracle PL/SQL

  3. mySql kopierer rækker til samme tabel med ændret nøgleværdi (overskriver ikke eksisterende)

  4. MySql-fejl:Kan ikke opdatere tabel i gemt funktion/trigger