syntaks
beskrivelse
opretter en gemt procedure. Som standard er en rutineforbundet med standarddatabasen. For at knytte rutineelicplicit til en given database, angiv navnet som db_name.sp_namenår du opretter det.
Når rutinen påberåbes, udføres et implicit brug db_name (andundone når rutinen ophører). Årsagerne rutinen at haveden givne standarddatabase, mens den udfører. Brug udsagn medinstallerede rutiner er ikke tilladt.,
Når en gemt procedure er blevet oprettet, påberåber du den ved at bruge CALL
– sætningen (se opkald).
for at udføreCREATE PROCEDURE
– erklæringen er det nødvendigt at haveCREATE ROUTINE
privilegiet. Som standard, MariaDBautomatically tilskud ALTER ROUTINE
og EXECUTE
privilegier til at theroutine skaberen. Se også gemte Rutineprivilegier.,
DEFINER
og S .l-sikkerhedsklausulerne angiver den sikkerhedskontekst, der skal bruges ved kontrol af adgangsrettigheder på rutinemæssig udførelsestid, som beskrevet senere. Kræver SUPER privilege, eller, fra MariaDB 10.5.2, SET USER privilege.
hvis rutinenavnet er det samme som navnet på en indbygget s .lfunktion, skal du bruge et mellemrum mellem navnet og følgendeparentese, når du definerer rutinen, eller der opstår en syntaksfejl. Dette gælder også, når du påberåber rutinen senere., Af denne grund foreslår vi, at det er bedre at undgå at genbruge navnene på eksisterende s .lfunctions til dine egne gemte rutiner.IGNORE_SPACE s .l-tilstanden gælder for indbyggede funktioner, ikke for storedroutines. Det er altid tilladt at have mellemrum efter et rutinenavn, uanset om IGNORE_SPACE er aktiveret.
parameterlisten, der er vedlagt i parenteser, skal altid være til stede.Hvis der ikke er nogen parametre, skal en tom parameterliste over () værebrugt. Parameternavne er ikke store og små bogstaver.,
hver parameter kan erklæres at bruge en gyldig datatype, bortset fra at SORTERINGSATTRIBUTTEN kan ikke bruges.
for gyldige identifikatorer, der skal bruges som Procedurenavne, se Identifikatornavne.
IN/OUT/INOUT
hver parameter er en IN
parameter som standard. For at angive andet foren parameter skal du bruge nøgleordet OUT
eller INOUT
før parameternavnet.
enIN
parameter overfører en værdi til en procedure., Proceduren kanændre værdien, men ændringen er ikke synlig for opkaldetnår proceduren vender tilbage. En OUT
parameter overfører en værdi from theprocedure tilbage til den, der ringer op. Dens oprindelige værdi er NULL inden forprocedure, og dens værdi er synlig for den, der ringer, når procedurenvender tilbage. EnINOUT
parameter initialiseres af den, der ringer, kan ændres ved proceduren, og enhver ændring foretaget af proceduren er synlig for den, der ringer, når proceduren vender tilbage.,
For hvert OUT
eller INOUT
parameter, passere en bruger-defineret variabel iCALL
erklæring, der kalder proceduren, så du kan få itsvalue, når den procedure, der returnerer. Hvis du ringer til den procedurefrom inden en gemt procedure eller funktion, kan du også gå aroutine parameter eller lokale rutine variabel som en IN
eller INOUT
parameter.
DETERMINISTISK/IKKE DETERMINISTISK
DETERMINISTIC
og NOT DETERMINISTIC
gælder kun for funktioner., Angivelse af DETERMINISTC
eller NON-DETERMINISTIC
i procedurer har ingen virkning. Standardværdien er NOT DETERMINISTIC
. Funktioner er DETERMINISTIC
, når de altid returnerer den samme værdi for den samme indgang. For eksempel en afkortet eller substring funktion. Enhver funktion, der involverer data, er derfor altid NOT DETERMINISTIC
.,
INDEHOLDER SQL/INGEN SQL/LÆSER SQL DATA/ÆNDRER SQL DATA
CONTAINS SQL
NO SQL
READS SQL DATA
og MODIFIES SQL DATA
er informative klausuler at fortælle serveren, hvad funktionen gør. MariaDB kontrollerer ikke på nogen måde, om den angivne klausul er korrekt. Hvis ingen af disse klausuler er angivet, bruges CONTAINS SQL
som standard.
MODIFIES SQL DATA
betyder, at funktionen indeholder udsagn, der kan ændre data, der er gemt i databaser., Dette sker, hvis funktionen indeholder udsagn som Slet, Opdater, indsæt, udskift eller DDL.
READS SQL DATA
betyder, at funktionen læser data, der er gemt i databaser, men ikke ændrer nogen data. Dette sker, hvis der bruges SELECT-udsagn, men der udføres ingen skriveoperationer.
CONTAINS SQL
betyder, at funktionen indeholder mindst en s .l-sætning, men den læser eller skriver ikke data, der er gemt i en database. Eksempler inkluderer SET eller DO.,
NO SQL
betyder intet, fordi MariaDB ikke understøtter andre sprog end S .l.
rutine_body består af en gyldig s .l-procedureerklæring. Vælg eller indsæt, eller det kan være en sammensat erklæring skrevet ved hjælp af start og slut. Sammensatte erklæringerkan indeholde erklæringer, sløjfer og andre kontrolstrukturer. Se programmatiske og sammensatte udsagn for syntaks detaljer.
MariaDB tillader rutiner at indeholde DDL-udsagn, såsomCREATE
andDROP., MariaDB tillader også lagrede procedurer (men ikke lagrede funktioner)at indeholde S .l-transaktionsopgørelser som COMMIT
.
For yderligere oplysninger om udsagn, der ikke er tilladt i lagrede rutiner, se lagrede rutinemæssige begrænsninger.
aktivering af lagret procedure indefra programmer
for information om påkaldelse af lagrede procedurer indefra programmer skrevet på et sprog, der har en MariaDB / Mys .l-grænseflade, se opkald.
eller erstat
MariaDB begyndende med 10.1.,3
Hvis den valgfriOR REPLACE
– klausul bruges, fungerer den som en genvej til:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
med den undtagelse, at eventuelle eksisterende privilegier til proceduren ikke tabes.
sql_mode
MariaDB gemmer sql_mode system variabel indstilling, der er i kraft på det tidspunkt, hvor programmet er sammensat, og altid udfører rutine med denne indstilling, der er i kraft, uanset server SQL-tilstand i kraft, når den rutine er gældende.
tegnsæt og sorteringer
Procedureparametre kan deklareres med ethvert tegnsæt / sortering., Hvis tegnsættet og sorteringen ikke er specifikt indstillet, bruges databasens standardindstillinger på oprettelsestidspunktet. Hvis databasens standardindstillinger ændres på et senere tidspunkt, ændres det lagrede procedures tegnsæt/sortering ikke på samme tid; den lagrede procedure skal tabes og genskabes for at sikre det samme tegnsæt/sortering som databasen bruges.
Oracle-tilstand
MariaDB startende med 10.3
fra MariaDB 10.3 er en delmængde af Oracles PL/S .l-sprog blevet understøttet ud over den traditionelle s .l / PSM-baserede MariaDB-syntaks., Se Oracle-tilstand fra MariaDB 10.3 for detaljer om ændringer, når du kører Oracle-tilstand.
Eksempler
følgende eksempel viser en simpel lagret procedure, der bruger en OUT
parameter. Det bruger kommandoen DELIMITER til at indstille en ny afgrænser for processens varighed-se afgrænsere i Mys .l-klienten.,
Tegnsæt og sortering:
SKABE ELLER ERSTATTE:
Se Også
- Identifikator Navne
- Gemt Procedure Oversigt
- ÆNDRE PROCEDURE
- SLIP PROCEDURE
- VIS SKABE PROCEDURE
- VIS PROCEDURE STATUS
- Gemt Rutine Privilegier
- Oplysninger Skema RUTINER Tabel