syntaxis

beschrijving

maakt een opgeslagen procedure aan. Standaard wordt een routine gekoppeld aan de standaarddatabase. Om de routineexplicitly te associëren met een gegeven database, geeft u de naam op als db_name.sp_name wanneer u het maakt.

wanneer de routine wordt aangeroepen, wordt een impliciet gebruik db_name uitgevoerd (en ongedaan gemaakt wanneer de routine wordt beëindigd). De zorgt ervoor dat de routine de opgegeven standaard database heeft terwijl deze wordt uitgevoerd. Gebruik statements withinstored routines zijn niet toegestaan.,

wanneer een opgeslagen procedure is aangemaakt, roept u deze aan met behulp van de instructie CALL (zie aanroep).

om het CREATE PROCEDURE statement uit te voeren, is het noodzakelijk om het CREATE ROUTINE privilege te hebben. Standaard verleent MariaDB automatisch de rechten ALTER ROUTINE en EXECUTE aan de maker. Zie ook opgeslagen Routinebevoegdheden.,

de DEFINER en SQL-beveiligingsclausules specificeren de beveiligingscontext die moet worden gebruikt bij het controleren van toegangsrechten op routine-uitvoertijd, zoals later beschreven. Vereist de SUPER privilege, of, Van MariaDB 10.5.2, de set USER privilege.

als de routinenaam dezelfde is als de naam van een ingebouwde SQL-functie, moet u een spatie gebruiken tussen de naam en de volgende parenthesis bij het definiëren van de routine, anders treedt er een syntaxfout op. Dit is ook waar wanneer u de routine later op te roepen., Om deze reden, wesuggest dat het beter is om te voorkomen dat het opnieuw gebruiken van de namen van bestaande Sqlfuncties voor uw eigen opgeslagen routines.

De IGNORE_SPACE SQL-modus is van toepassing op ingebouwde functies, niet op storedroutines. Het is altijd toegestaan om spaties achter een routinenaam te hebben,ongeacht of IGNORE_SPACE is ingeschakeld.

de parameterlijst tussen haakjes moet altijd aanwezig zijn.Als er geen parameters zijn, moet een lege parameterlijst van () worden gebruikt. Parameternamen zijn niet hoofdlettergevoelig.,

elke parameter kan worden gedeclareerd om elk geldig gegevenstype te gebruiken, behalve dat het attribuut COLLATE niet kan worden gebruikt.

voor geldige identifiers die als procedurenamen moeten worden gebruikt, zie Identifier Names.

IN/OUT/INOUT

elke parameter is standaard een IN parameter. Om een andere parameter te specificeren, gebruik je het trefwoord OUT of INOUT voor de parameternaam.

An IN parameter geeft een waarde door in een procedure., De procedure kan de waarde wijzigen, maar de wijziging is niet zichtbaar voor de bellerwanneer de procedure terugkeert. EenOUT parameter geeft een waarde van de procedure terug aan de beller. De initiële waarde is NULL binnen de procedure, en de waarde is zichtbaar voor de beller wanneer de procedure wordt ingeschakeld. EenINOUT parameter wordt geïnitialiseerd door de beller, kan worden gewijzigd door de procedure, en elke wijziging die wordt gemaakt door de procedure is zichtbaar voor de beller wanneer de procedure terugkeert.,

voor elke OUT of INOUT parameter, geef een door de gebruiker gedefinieerde variabele door in hetCALL statement dat de procedure aanroept zodat u de waarde ervan kunt verkrijgen wanneer de procedure terugkeert. Als u de procedure aanroept vanuit een andere opgeslagen procedure of functie, kunt u ook aroutine parameter of lokale routine variabele doorgeven als een IN of INOUTparameter.

deterministisch / niet deterministisch

DETERMINISTIC en NOT DETERMINISTIC gelden alleen voor functies., Het specificeren van DETERMINISTC of NON-DETERMINISTIC in procedures heeft geen effect. De standaardwaarde is NOT DETERMINISTIC. Functies zijn DETERMINISTIC wanneer ze altijd dezelfde waarde retourneren voor dezelfde invoer. Bijvoorbeeld, een afkappen of substring functie. Elke functie met gegevens is daarom altijd NOT DETERMINISTIC.,

bevat SQL/NO SQL/leest SQL-gegevens/wijzigt SQL-gegevens

CONTAINS SQL, NO SQL, READS SQL DATA, en MODIFIES SQL DATA Zijn informatieve clausules die vertellen de server wat de functie doet. MariaDB controleert op geen enkele wijze of de opgegeven clausule correct is. Als geen van deze clausules is gespecificeerd, wordt CONTAINS SQL standaard gebruikt.

MODIFIES SQL DATA betekent dat de functie statements bevat die gegevens in databases kunnen wijzigen., Dit gebeurt als de functie statements zoals DELETE, UPDATE, INSERT, REPLACE of DDL bevat.

READS SQL DATA betekent dat de functie Gegevens leest die zijn opgeslagen in databases, maar geen gegevens wijzigt. Dit gebeurt als SELECT statements worden gebruikt, maar er worden geen schrijfbewerkingen uitgevoerd.

CONTAINS SQL betekent dat de functie ten minste één SQL-statement bevat, maar dat het geen gegevens in een database leest of schrijft. Voorbeelden zijn SET or DO.,

NO SQL betekent niets, omdat MariaDB momenteel geen andere taal dan SQL ondersteunt.

De routine_body bestaat uit Een geldig SQL procedure statement. Dit kan een eenvoudig statement zijn, zoals SELECT of INSERT, of het kan een samengesteld statement zijn dat geschreven is met BEGIN en einde. Samengestelde statements kunnen declaraties, lussen en andere Control structurestatements bevatten. Zie programmatische en samengestelde Statements voor syntaxis details.

MariaDB staat toe dat routines DDL-statements bevatten, zoals CREATE andDROP., MariaDB staat ook toe dat opgeslagen procedures (maar niet opgeslagen functies)SQL-transactieafschriften bevatten, zoals COMMIT.

voor meer informatie over statements die niet zijn toegestaan instored routines, zie opgeslagen Routinebeperkingen.

aanroepen van opgeslagen procedures vanuit programma ‘s

voor informatie over aanroepen van opgeslagen procedures vanuit programma’ s die zijn geschreven in een taal die een MariaDB/MySQL-interface heeft, zie CALL.

of vervang

MariaDB beginnend met 10.1.,3

als de optioneleOR REPLACE clausule wordt gebruikt, fungeert het als een sneltoets voor:

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

met de uitzondering dat bestaande privileges voor de procedure niet worden geschrapt.

Sql_mode

MariaDB slaat de sql_mode-systeemvariabele op die van kracht is op het moment dat een routine wordt aangemaakt, en voert de routine altijd uit met deze instelling, ongeacht de SQL-modus van de server die van kracht is wanneer de routine wordt aangeroepen.

tekensets en Collaties

Procedureparameters kunnen worden gedeclareerd met elke tekenset / collatie., Als de tekenset en collatie niet specifiek zijn ingesteld, worden de standaardwaarden van de database op het moment van aanmaken gebruikt. Als de standaardwaarden van de database in een later stadium veranderen, zal de opgeslagen procedure-tekenset/ – collatie niet tegelijkertijd worden gewijzigd; de opgeslagen procedure moet worden geschrapt en opnieuw worden gemaakt om ervoor te zorgen dat dezelfde tekenset/ – collatie wordt gebruikt als de database.

Oracle Mode

MariaDB beginnend met 10.3

vanuit MariaDB 10.3 wordt een subset van Oracle ‘ s PL/SQL-taal ondersteund naast de traditionele MariaDB-syntaxis op basis van SQL/PSM., Zie Oracle mode van MariaDB 10.3 voor meer informatie over wijzigingen bij het uitvoeren van Oracle mode.

voorbeelden

het volgende voorbeeld toont een eenvoudige opgeslagen procedure die een OUTparameter gebruikt. Het gebruikt het DELIMITER commando om een nieuw delimiter in te stellen voor de duur van het proces — zie Delimiters in de MySQL client.,

tekenset en collatie:

aanmaken of vervangen:

zie ook

  • Identifier Names
  • Stored Procedure Overview
  • ALTER PROCEDURE
  • DROP PROCEDURE
  • toon procedure STATUS
  • opgeslagen Routineprivileges
  • Informatieschema ROUTINES Table

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *