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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *