sintaxa
descriere
creează o procedură stocată. În mod implicit, o rutină esteasociate cu baza de date implicită. Pentru a asocia rutineexplic cu o bază de date dată, specificați numele ca db_name.sp_namecând îl creați.
când rutina este invocată, se efectuează o utilizare implicită db_name (andundone când rutina se termină). Cauzele rutina de a havthe dat bază de date implicită în timp ce execută. Utilizați declarații curituatele stocate nu sunt permise.,
când a fost creată o procedură stocată, o invocați utilizând instrucțiunea CALL
(consultați apelul).
Pentru a executa CREATE PROCEDURE
declarație, se isnecessary să aibă CREATE ROUTINE
privilegiu. În mod implicit, MariaDBautomatically acordă ALTER ROUTINE
și EXECUTE
privilegii pentru theroutine creator. A se vedea, de asemenea, stocate privilegii de rutină.,
DEFINER
și clauzele de securitate SQL specifică contextul de securitate tobe utilizat la verificarea privilegiilor de acces la timpul de execuție de rutină, descris mai târziu. Necesită privilegiul SUPER sau, din MariaDB 10.5.2, privilegiul utilizatorului setat.
dacă numele rutinei este același cu numele unei funcții SQL încorporate, trebuie să utilizați un spațiu între nume și următoareleparenteză atunci când definiți rutina sau apare o eroare de sintaxă. Acest lucru este valabil și atunci când invocați rutina mai târziu., Din acest motiv, wesuggest că este mai bine pentru a evita re-utilizarea numele sqlfunctions existente pentru propriile rutine stocate.modul IGNORE_SPACE SQL se aplică funcțiilor încorporate, nu stocăriidrutine. Este întotdeauna permis să aibă spații după un nume de rutină, indiferent dacă IGNORE_SPACE este activat.
lista de parametri inclusă în paranteze trebuie să fie întotdeauna prezentă.Dacă nu există parametri, ar trebui să fie o listă de parametri goală de (). Numele parametrilor nu sunt sensibile la majuscule.,
fiecare parametru poate fi declarat pentru a utiliza orice tip de date valid, cu excepția faptului căatributul COLLATE nu poate fi utilizat.
pentru ca identificatorii valizi să fie utilizați ca nume de proceduri, consultați numele identificatorilor.
IN/OUT/INOUT
fiecare parametru este un parametru IN
implicit. Pentru a specifica altfel forurile parametru, utilizați cuvinte cheie OUT
sau INOUT
înainte de numele parametrului.
un IN
parametru trece o valoare într-o procedură., Procedura ar putea modifica valoarea, dar modificarea nu este vizibilă pentru apelantcând procedura revine. Un parametru OUT
trece o valoare dinprocedura înapoi la apelant. Valoarea sa inițială este nulă înprocedură, iar valoarea sa este vizibilă apelantului atunci când proceduraîntoarce. Un INOUT
parametru este inițializat de către apelant, poate bemodified de procedură, precum și orice modificare făcută prin procedura isvisible a apelantului atunci când procedura de returnare.,
Pentru fiecare OUT
sau INOUT
parametru, trece o variabil definite de utilizator înCALL
declarație care invocă procedura, astfel încât să puteți obține itsvalue când procedura de returnare. Dacă sunteți de asteptare procedurefrom în cadrul altei proceduri stocate sau funcții, puteți trece, de asemenea, aroutine parametru sau locale de rutină variabilă ca un IN
sau INOUT
parametru.
determinist / nu determinist
DETERMINISTIC
și NOT DETERMINISTIC
se aplică numai funcțiilor., Specificarea DETERMINISTC
sau NON-DETERMINISTIC
în proceduri nu are efect. Valoarea implicită este NOT DETERMINISTIC
. Funcțiile sunt DETERMINISTIC
când returnează întotdeauna aceeași valoare pentru aceeași intrare. De exemplu, o funcție trunchiată sau subșir. Prin urmare, orice funcție care implică date este întotdeauna NOT DETERMINISTIC
.,
CONȚINE SQL/SQL NU/CITEȘTE DATE SQL/MODIFICĂ DATE SQL
CONTAINS SQL
, NO SQL
, READS SQL DATA
și MODIFIES SQL DATA
sunt informative clauze care spune serverului ce funcția nu. MariaDB nu verifică în niciun fel dacă clauza specificată este corectă. Dacă niciuna dintre aceste clauze nu este specificată, CONTAINS SQL
este utilizată în mod implicit.
MODIFIES SQL DATA
înseamnă că funcția conține declarații care pot modifica datele stocate în bazele de date., Acest lucru se întâmplă dacă funcția conține declarații precum ștergere, actualizare, Inserare, înlocuire sau DDL.
READS SQL DATA
înseamnă că funcția citește datele stocate în bazele de date, dar nu modifică Date. Acest lucru se întâmplă dacă se utilizează instrucțiuni selectate, dar nu se execută operații de scriere.
CONTAINS SQL
înseamnă că funcția conține cel puțin o instrucțiune SQL, dar nu citește sau scrie date stocate într-o bază de date. Exemplele includ SET sau DO.,
NO SQL
nu înseamnă nimic, deoarece MariaDB nu acceptă în prezent nici o altă limbă decât SQL.
routine_body constă dintr-o declarație de procedură SQL validă. Aceasta poate fi o declarație simplă, cum ar fi SELECT sau INSERT, sau poate fi o declarație compusă scrisă folosind începutul și sfârșitul. Declarații compusepot conține declarații, bucle și alte structuri de controldeclarații. A se vedea declarații programatice și compuse pentru detalii de sintaxă.MariaDB permite rutine să conțină declarații DDL, cum ar fi CREATE
andDROP., MariaDB permite, de asemenea, proceduri stocate (dar nu și funcții stocate)să conțină declarații de tranzacție SQL, cum ar fi COMMIT
.
Pentru informații suplimentare despre declarațiile care nu sunt permise Rutine stocate, consultați limitările de rutină stocate.pentru informații despre invocarea procedurilor stocate din cadrul programelor scrise într-o limbă care are o interfață MariaDB/MySQL, consultați CALL.
sau înlocuiți
MariaDB începând cu 10.1.,3
Daca opțional OR REPLACE
clauză este utilizat, acesta acționează ca o comandă rapidă pentru:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
cu excepția faptului că orice privilegiile existente pentru procedura nu a scăzut.
sql_mode
MariaDB magazine sql_mode variabila de sistem setare care este în vigoare la data de rutină este creat, și întotdeauna execută rutina cu această setare în vigoare, indiferent de server SQL modul în efect atunci când rutina este invocat.
Seturi de caractere și Colaționări
parametrii de procedură pot fi declarați cu orice set de caractere / colaționare., Dacă setul de caractere și colaționarea nu sunt setate în mod specific, vor fi utilizate valorile implicite ale bazei de date la momentul creării. Dacă baza de date implicite schimba într-o etapă ulterioară, procedura stocată set de caractere/colaționare nu va fi schimbat în același timp; procedura stocată trebuie să fie scăzut și recreat pentru a asigura același set de caractere/colaționare ca baza de date este utilizat.
modul Oracle
MariaDB începând cu 10.3
Din MariaDB 10.3, un subset al limbajului PL/SQL Oracle a fost acceptat în plus față de sintaxa tradițională MariaDB bazată pe SQL/PSM., Consultați modul Oracle din MariaDB 10.3 pentru detalii despre modificările la rularea modului Oracle.
Exemple
următorul exemplu arată o procedură simplă stocată care utilizează un parametru OUT
. Utilizează comanda delimitator pentru a seta un nou delimitator pe durata procesului — vezi delimitatori în clientul mysql.,
set de caractere și colaționare:
creați sau înlocuiți:
A se vedea, de asemenea
- nume de identificare
- Prezentare generală a procedurii stocate
- procedura ALTER
- procedura DROP
- arată crearea procedurii
- arată starea procedurii
- privilegii de rutină stocate