Syntaks
Beskrivelse
Oppretter en lagret prosedyre. Som standard, en rutine isassociated med standard database. Å knytte routineexplicitly med en gitt database, angi navnet som db_name.sp_namewhen du opprette den.
Når rutinen er påberopt, en implisitt BRUK db_name er utført (andundone når rutinen opphører). Det fører til at rutine for å havethe gitt standard database mens det kjører. BRUK uttalelser withinstored rutiner er forbudt.,
Når en lagret prosedyre er opprettet, kan du bruke det byusing CALL
uttalelse (se SAMTALE).
for Å utføre. CREATE PROCEDURE
statement, det isnecessary å ha CREATE ROUTINE
privilegium. Som standard, MariaDBautomatically tilskudd ALTER ROUTINE
og EXECUTE
rettigheter til theroutine skaperen. Se også Lagret Rutine Privilegier.,
DEFINER
og SQL SIKKERHET klausuler angi sikkerhet sammenheng tobe brukes ved kontroll av tilgangsrettigheter på rutine execution time, asdescribed senere. Krever SUPER privilegium, eller, fra MariaDB 10.5.2, SETT BRUKER privilegium.
Hvis rutine navnet er det samme som navnet på en innebygd SQLfunction, må du bruke en plass mellom navn og followingparenthesis når du definerer rutine, eller en syntaks-feil oppstår. Thisis også sant når du åpner rutine senere., For denne grunn, wesuggest at det er bedre å unngå gjenbruk av navn på eksisterende SQLfunctions for dine egne lagrede rutiner.
IGNORE_SPACE SQL-modus gjelder innebygde funksjoner, for ikke å storedroutines. Det er alltid tillatt for å ha mellomrom etter en rutinemessig navn,uavhengig av om IGNORE_SPACE er aktivert.
parameterliste innelukket i parentes må alltid være til stede.Hvis det ikke er noen parametere, en tom parameterliste av () bør beused. Parameter navn er ikke mellom store og små bokstaver.,
Hver parameter kan bli erklært å bruke alle gyldige data type, unntatt thatthe SORTER attributtet kan ikke brukes.
For gyldig identifikatorer til bruk som prosedyre navn, se Identifikator Navn.
I/UT/INOUT
Hver parameter er en IN
parameter som standard. For å angi ellers fora parameter, bruk søkeord OUT
eller INOUT
før parameteren navn.
En IN
parameter passerer en verdi i en prosedyre., Prosedyren mightmodify verdi, men endringen er ikke synlig for callerwhen prosedyren returnerer. En OUT
parameter passerer en verdi fra theprocedure tilbake til den som ringer. Den første verdien er NULL innen theprocedure, og verdien er synlig for den som ringer når procedurereturns. En INOUT
parameteren er initialisert av den som ringer, kan bemodified av prosedyren, og eventuelle endringer som gjøres av prosedyren isvisible til den som ringer når den returneres.,
For hver OUT
eller INOUT
parameter, passere en brukerdefinert variabel iCALL
uttalelse som påkaller prosedyren slik at du kan få itsvalue når den returneres. Hvis du ringer det procedurefrom i en annen lagret prosedyre eller funksjon, du kan også sende aroutine parameter eller lokal rutine for variabel som en IN
eller INOUT
– parameteren.
DETERMINISTISKE/IKKE-DETERMINISTISK
DETERMINISTIC
og NOT DETERMINISTIC
gjelder bare til funksjoner., Angi DETERMINISTC
eller NON-DETERMINISTIC
i prosedyrer ikke har noen effekt. Standard verdi er NOT DETERMINISTIC
. Funksjoner DETERMINISTIC
når de alltid tilbake samme verdi for de samme inngang. For eksempel, en avkorte eller delstreng-funksjonen. Enhver funksjon som involverer data, derfor er det alltid NOT DETERMINISTIC
.,
INNEHOLDER SQL/NEI-SQL/LESER SQL DATA/ENDRER SQL DATA
CONTAINS SQL
, NO SQL
, READS SQL DATA
, og MODIFIES SQL DATA
er informative setninger som forteller server hva funksjonen gjør. MariaDB kontrollerer ikke på noen måte, enten det angitte punkt er riktig. Hvis ingen av disse punktene er angitt, CONTAINS SQL
brukes som standard.
MODIFIES SQL DATA
betyr at funksjonen inneholder uttalelser som kan endre data som er lagret i databaser., Dette skjer hvis-funksjonen inneholder uttalelser som du vil SLETTE, OPPDATERE, SETTE inn, BYTTE eller DDL.
READS SQL DATA
betyr at funksjonen leser data som er lagret i databaser, men ikke endre data. Dette skjer hvis du VELGER uttalelser er brukt, men det er ingen skrive-operasjoner er utført.
CONTAINS SQL
betyr at funksjonen inneholder minst en SQL-setning, men det gjør ikke lese eller skrive data som er lagret i en database. Eksempler på dette er SATT eller IKKE.,
NO SQL
betyr ingenting, fordi MariaDB støtter for øyeblikket ikke noe annet språk enn SQL.
routine_body består av en gyldig SQL-prosedyren uttalelse. Dette canbe en enkel uttalelse som VELGER eller SETT inn, eller det kan være acompound erklæring skrevet bruke BEGYNNER og slutter. Sammensatte statementscan inneholde erklæringer, løkker og andre kontroll structurestatements. Se Programmatiske og Sammensatte Utsagn for syntaks detaljer.
MariaDB lar rutiner som inneholder DDL-setninger, for eksempel CREATE
andDROP., MariaDB også lar lagrede prosedyrer (men ikke lagret funksjoner)for å inneholde SQL transaksjon uttalelser, for eksempel COMMIT
.
For mer informasjon om uttalelser som er ikke tillatt instored rutiner, se Lagret Rutine Begrensninger.
Bruk en lagret prosedyre innenfor programmer
For mer informasjon om å bruke lagrede prosedyrer fra i programmer skrevet i et språk som har en MariaDB/MySQL-grensesnittet, kan du se SAMTALE.
ELLER BYTT
MariaDB starter med 10.1.,3
Hvis den valgfrie OR REPLACE
klausulen er brukt, det fungerer som en snarvei for:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
med unntak av at alle eksisterende rettigheter for prosedyren er ikke falt.
sql_mode
MariaDB lagrer sql_mode system variabel innstilling som er i kraft på det tidspunkt en rutine er opprettet, og alltid kjører rutine med denne innstillingen i kraft, uavhengig av SQL server-modus i kraft når rutinen er tatt i bruk.
tegnsett og Sammenligninger
Prosedyre parametere kan bli kjent med noen tegnsett/sortering., Hvis tegnsettet og sortering er ikke spesifikt angitt, database standarder på tidspunktet for opprettelsen vil bli brukt. Hvis databasen standardinnstillinger, endre på et senere tidspunkt, vil den lagrede prosedyren tegnsett/sortering vil ikke bli endret på samme tid; den lagrede prosedyren behov for å bli droppet, og gjenskapt for å sikre at den samme tegnsett/sortering som databasen er brukt.
Oracle-Modus
MariaDB starter med 10.3
Fra MariaDB 10.3, et delsett av Oracle ‘ s PL/SQL-språket har vært støttet i tillegg til den tradisjonelle SQL/PSM-basert MariaDB syntaks., Se Oracle-modus fra MariaDB 10.3 for detaljer om endringene når du kjører Oracle-modus.
Eksempler på
følgende eksempel viser en enkel lagret prosedyre som bruker en OUT
– parameteren. Den bruker SKILLETEGN-kommandoen til å angi et nytt skilletegn for varigheten av prosessen — se Skilletegn i mysql klient.,
tegnsett og sortering:
OPPRETT ELLER ERSTATTE:
Se Også:
- Identifikator Navn
- Lagret Prosedyre Oversikt
- ENDRE PROSEDYREN
- UTELAT PROSEDYRE
- VIS OPPRETTE PROSEDYRE
- VIS PROSEDYRE STATUS
- Lagret Rutine Privilegier
- Informasjon-Skjema RUTINER Tabell