Lagrad procedur

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 27 maj 2020; kontroller kräver 5 redigeringar .

En  lagrad procedur är  ett databasobjekt , som är en uppsättning SQL -satser som kompileras en gång och lagras på servern. Lagrade procedurer är mycket lika vanliga procedurer på högnivåspråk , de kan ha in- och utdataparametrar och lokala variabler , de kan utföra numeriska beräkningar och operationer på teckendata, vars resultat kan tilldelas variabler och parametrar. Lagrade procedurer kan utföra standarddatabasoperationer (både DDL och DML). Dessutom är loopar och grenar möjliga i lagrade procedurer, det vill säga de kan använda instruktioner för att styra exekveringsprocessen.

Lagrade procedurer liknar användardefinierade funktioner (UDF). Den största skillnaden är att användardefinierade funktioner kan användas som alla andra uttryck i en SQL-fråga, medan lagrade procedurer måste anropas med CALL-funktionen:

SAMTALsprocedur ( ... ) _

eller

UTFÖR procedur ( ... )

Lagrade procedurer kan returnera resultatuppsättningar, det vill säga resultatet av en SELECT-fråga. Sådana resultatuppsättningar kan bearbetas med hjälp av markörer, genom andra lagrade procedurer som returnerar en resultatuppsättningspekare eller av applikationer. Lagrade procedurer kan också innehålla deklarerade variabler för hantering av data och markörer, som låter dig gå över flera rader i en tabell. SQL-standarden tillhandahåller IF, LOOP, REPEAT, CASE och många fler uttryck att arbeta med. Lagrade procedurer kan acceptera variabler, returnera resultat eller modifiera variabler och returnera dem, beroende på var variabeln deklareras.

Implementeringen av lagrade procedurer varierar från ett DBMS till ett annat. De flesta större databasleverantörer stöder dem i en eller annan form. Beroende på DBMS kan lagrade procedurer implementeras i olika programmeringsspråk som SQL, Java, C eller C++. Lagrade procedurer som inte är skrivna i SQL kan eller kanske inte köra SQL-frågor själva. Den ökande användningen av lagrade procedurer har lett till uppkomsten av procedurelement i SQL-språket i SQL:1999- och SQL:2003-standarderna i SQL/PSM- delen . Detta gjorde SQL till ett imperativt programmeringsspråk . De flesta DBMS erbjuder sina egna proprietära och leverantörstillägg, utöver SQL/PSM.

Implementering av lagrade procedurer

Lagrade procedurer skapas vanligtvis med hjälp av SQL-språket och dess specifika implementering i det valda DBMS . Till exempel, för dessa ändamål har Microsoft SQL Server DBMS Transact-SQL-språket , Oracle  - PL/SQL , InterBase och Firebird  - PSQL , PostgreSQL  - PL/pgSQL , PL/Tcl , PL/Perl , PL/Python , IBM DB2  - SQL / PL , i Informix - SPL . MySQL följer SQL:2003 -standarden ganska nära , och dess språk liknar SQL/PL.

I vissa DBMS är det möjligt att använda lagrade procedurer skrivna i alla programmeringsspråk som kan skapa oberoende körbara filer, såsom C++ eller Delphi . I Microsoft SQL Server-terminologi kallas sådana procedurer utökade lagrade procedurer och är helt enkelt funktioner som ingår i en Win32 DLL . Och, till exempel, i Interbase och Firebird för funktioner som anropas från DLL / SO, definieras ett annat namn - UDF (User Defined Function). MS SQL 2005 introducerade möjligheten att skriva lagrade procedurer på vilket .NET- språk som helst , och utökade lagrade procedurer planeras att överges i framtiden. Oracle DBMS tillåter i sin tur att skriva lagrade procedurer på Java-språket . [1] I IBM DB2 är skrivning av lagrade procedurer och funktioner i konventionella programmeringsspråk det traditionella sättet, som stöds från början, och SQL-procedurförlängningen lades till i denna DBMS först ganska sent, efter att den inkluderades i ANSI-standarden . Informix stöder även Java- och C -procedurer . [2]

I Oracle DBMS kan lagrade procedurer kombineras till så kallade paket .  Paketet består av två delar - specifikationen ( eng. paketspecifikation ), som anger definitionen av den lagrade proceduren, och kroppen ( eng. package body ), där dess implementering finns. Således låter Oracle dig separera programkodens gränssnitt från dess implementering.   

I IBM DB2 kan lagrade procedurer kombineras till .

I PostgreSQL är det, förutom lagrade procedurer, möjligt att skapa funktioner som returnerar void typ .

Syfte och fördelar med lagrade procedurer [3]

Lagrade procedurer förbättrar prestandan, förbättrar programmeringsalternativen och stöder datasäkerhetsfunktioner.

Istället för att lagra en ofta använd fråga kan klienter hänvisa till lämplig lagrad procedur. När en lagrad procedur anropas, behandlas dess innehåll omedelbart av servern.

Förutom själva exekveringen av frågan låter lagrade procedurer dig också utföra beräkningar och manipulera data - ändra, ta bort, exekvera DDL-satser (inte i alla DBMS!) och anropa andra lagrade procedurer, utföra komplex transaktionslogik. En enda sats låter dig anropa ett komplext skript som finns i en lagrad procedur, vilket undviker att skicka hundratals kommandon över nätverket och i synnerhet behovet av att överföra stora mängder data från klienten till servern.

I de flesta DBMS:er, första gången en lagrad procedur körs, kompileras den (tolkas och en dataåtkomstplan genereras). I framtiden är dess bearbetning snabbare. Oracle DBMS tolkar lagrad procedurkod lagrad i en dataordbok . Från och med Oracle 10g stöds den så kallade native kompileringen (native kompileringen) av lagrad procedurkod i C och sedan in i målmaskinens maskinkod, varefter, när den lagrade proceduren anropas, dess kompilerade objektkod direkt avrättade.

Programmeringsfunktioner

Den genererade lagrade proceduren kan anropas när som helst, vilket ger modularitet och uppmuntrar kodåteranvändning . Det senare gör det lättare att underhålla databasen, eftersom den blir isolerad från ändrade affärsregler. Du kan när som helst ändra en lagrad procedur för att följa de nya reglerna. Efter det kommer alla applikationer som använder det automatiskt att följa de nya affärsreglerna utan direkta ändringar.

För att förenkla testning, oberoende av affärslogiken för applikationer från DBMS, finns det ett tillvägagångssätt där DBMS endast fungerar som ett arkiv, med ett minimum antal lagrade procedurer eller ett fullständigt avslag på dem. I det här fallet används mappningen av affärslogikprogramvaruenheter till lagringen. Se ORM (eng. Object-relational mapping, rus. Object-relational mapping)

Säkerhet

Användningen av lagrade procedurer låter dig begränsa eller helt utesluta direkt användaråtkomst till databastabeller, vilket ger användarna endast behörighet att utföra lagrade procedurer som ger indirekt och strikt reglerad åtkomst till data. Dessutom stöder vissa DBMS textkryptering (omslag) av en lagrad procedur.

Dessa säkerhetsfunktioner gör att du kan isolera databasstrukturen från användaren, vilket säkerställer databasens integritet och tillförlitlighet.

Åtgärder som " SQL-injektion " är mindre sannolika eftersom välskrivna lagrade procedurer dessutom validerar indataparametrar innan frågan skickas till DBMS.

Anteckningar

  1. OracleJVM och Java lagrade  procedurer . Oracle Inc.. - En del av Oracle-portalen dedikerad till Java-teknik som en del av Oracle DBMS-servern. Hämtad 6 juni 2009. Arkiverad från originalet 21 augusti 2011.
  2. J/Foundation Developer's  Guide . IBM. — Avsnitt i Informix-dokumentationen om utveckling av lagrade procedurer på Java-språket. Hämtad 9 februari 2011. Arkiverad från originalet 10 februari 2012.
  3. Design och implementering av Microsoft SQL Server-databaser. - M.-SPb.: Ryska upplagan, Peter, 2005. - 512 sid. — ISBN 5-7502-0089-2 , ISBN 5-469-00821-5 .

Länkar