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 INOUTparameter.

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 OUTparameter. 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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *