Syntax

beskrivning

skapar en lagrad procedur. Som standard är en rutinassocierad med standarddatabasen. För att associera rutinenexplicit med en given databas, ange namnet som db_name.sp_namewnär du skapar den.

När rutinen anropas utförs en implicit användning av db_name (andundone när rutinen avslutas). Det orsakar rutinen att Haden givna standarddatabasen medan den körs. Använd uttalanden medinstallerade rutiner är otillåtna.,

När en lagrad procedur har skapats anropar du den genom att användaCALL – satsen (se anrop).

för att exekveraCREATE PROCEDURE – satsen är det nödvändigt att ha behörighetenCREATE ROUTINE. Som standard beviljar Mariadbautomatiskt behörigheternaALTER ROUTINE ochEXECUTE till theroutine creator. Se även lagrade Rutinbehörigheter.,

DEFINER och SQL-säkerhetsklausuler anger det säkerhetskontext som ska användas vid kontroll av åtkomstbehörighet vid rutinmässig körningstid, sombeskrivs senare. Kräver superbehörighet, eller, från MariaDB 10.5.2, den inställda användarbehörighet.

om rutinnamnet är detsamma som namnet på en inbyggd Sqlfunktion, måste du använda ett mellanslag mellan namnet och följandeförälder när du definierar rutinen, eller ett syntaxfel uppstår. Dettaär också sant när du åberopar rutinen senare., Av denna anledning, wesuggest att det är bättre att undvika att återanvända namnen på befintliga SQLfunctions för dina egna lagrade rutiner.

IGNORE_SPACE SQL-läget gäller inbyggda funktioner, inte storedroutines. Det är alltid tillåtet att ha mellanslag efter ett rutinnamn, oavsett om IGNORE_SPACE är aktiverat.

parameterlistan inom parentes måste alltid finnas.Om det inte finns några parametrar bör en tom parameterlista med () användas. Parameternamn är inte skiftlägeskänsliga.,

varje parameter kan deklareras att använda vilken giltig datatyp som helst, förutom att attributet COLLATE inte kan användas.

för giltiga identifierare som ska användas som procedurnamn, se identifieringsnamn.

in/OUT/inout

varje parameter är enIN parameter som standard. För att ange annat fören parameter, använd sökordetOUT ellerINOUT före parameternamnet.

enIN parameter överför ett värde till ett förfarande., Förfarandet mightändra värdet, men ändringen är inte synlig för callernär proceduren returneras. EnOUT parameter passerar ett värde frånproceduren tillbaka till den som ringer. Dess ursprungliga värde är NULL inomproceduren, och dess värde är synligt för den som ringer när procedurerereturns. EnINOUT – parameter initieras av den som ringer, kan bemodifieras av proceduren och eventuella ändringar som görs av proceduren ärsynlig för den som ringer när proceduren returnerar.,

för varjeOUT ellerINOUT-parameter, skicka en användardefinierad variabel iCALL – satsen som anropar proceduren så att du kan få dessvärde när proceduren returneras. Om du anropar procedurenfrån en annan lagrad procedur eller funktion kan du också skicka aroutine parameter eller lokal rutinvariabel som en IN eller INOUTparameter.

deterministisk/inte deterministisk

DETERMINISTIC ochNOT DETERMINISTIC gäller endast för funktioner., Att angeDETERMINISTC ellerNON-DETERMINISTIC I procedurer har ingen effekt. Standardvärdet är NOT DETERMINISTIC. Funktionerna är DETERMINISTIC när de alltid returnerar samma värde för samma ingång. Till exempel en trunkerad eller substring-funktion. Alla funktioner som involverar data är därför alltid NOT DETERMINISTIC.,

innehåller SQL/NO SQL/läser SQL DATA/ändrar SQL DATA

CONTAINS SQL,NO SQL,READS SQL DATA ochMODIFIES SQL DATA är informativa klausuler som berättar för servern vad funktionen gör. MariaDB kontrollerar inte på något sätt om den angivna klausulen är korrekt. Om inget av dessa klausuler anges används CONTAINS SQL som standard.

MODIFIES SQL DATA innebär att funktionen innehåller uttalanden som kan ändra data som lagras i databaser., Detta händer om funktionen innehåller uttalanden som ta bort, uppdatera, infoga, Ersätt eller DDL.

READS SQL DATA innebär att funktionen läser data som lagras i databaser, men ändrar inte data. Detta händer om SELECT-satser används, men inga skrivoperationer utförs.

CONTAINS SQL innebär att funktionen innehåller minst en SQL-sats, men den läser eller skriver inte data som lagras i en databas. Exempel inkluderar SET eller DO.,

NO SQL betyder ingenting, eftersom MariaDB för närvarande inte stöder något annat språk än SQL.

routine_body består av en giltig SQL-procedursats. Detta kan vara ett enkelt uttalande som Välj eller infoga, eller det kan vara enkonkurrent uttalande skrivet med start och slut. Sammansatta uttalandenkan innehålla deklarationer, loopar och andra kontrollstruktureruttalanden. Se programmatiska och sammansatta uttalanden för syntax detaljer.

MariaDB tillåter rutiner att innehålla DDL-uttalanden, till exempel CREATE andDROP., MariaDB tillåter även lagrade procedurer (men inte lagrade funktioner)att innehålla SQL-transaktionssatser som COMMIT.

För ytterligare information om uttalanden som inte är tillåtna i sparade rutiner, se lagrade Rutinbegränsningar.

anropa lagrad procedur inifrån program

För information om att anropa lagrade procedurer inifrån program skrivna på ett språk som har ett MariaDB / MySQL-gränssnitt, Se Ring.

eller ersätt

MariaDB börjar med 10.1.,3

om tillvaletOR REPLACE används, fungerar det som en genväg för:

DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;

med undantag för att eventuella befintliga behörigheter för förfarandet inte tas bort.

sql_mode

MariaDB lagrar sql_mode systemvariabelinställningen som gäller när en rutin skapas, och utför alltid rutinen med den här inställningen i kraft, oavsett server SQL-läget som gäller när rutinen startas.

teckenuppsättningar och sorteringar

procedur parametrar kan deklareras med någon teckenuppsättning / sortering., Om teckenuppsättningen och sorteringen inte är specifikt inställda används databasens standardvärden vid tidpunkten för skapandet. Om databasens standardvärden ändras i ett senare skede ändras inte den lagrade procedurteckenuppsättningen/sorteringen samtidigt. den lagrade proceduren måste tappas bort och återskapas för att säkerställa samma teckenuppsättning/sortering som databasen används.

Oracle Mode

MariaDB som börjar med 10.3

Från MariaDB 10.3 har en delmängd av Oracles PL/SQL-språk stödts utöver den traditionella SQL / PSM-baserade MariaDB-syntaxen., Se Oracle-läge från MariaDB 10.3 för detaljer om ändringar när du kör Oracle-läge.

exempel

följande exempel visar en enkel lagrad procedur som använder enOUTparameter. Den använder kommandot avgränsare för att ställa in en ny avgränsare under hela processen-se avgränsare i mysql-klienten.,

teckenuppsättning och sortering:

skapa eller ersätt:

Se även

  • identifieringsnamn
  • översikt över lagrad procedur
  • ändra proceduren
  • släpp proceduren
  • visa skapa proceduren
  • visa PROCEDURSTATUS
  • lagrade rutin privilegier
  • Informationsschema rutiner tabell

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *