Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Like dokumenter
Tilkobling og Triggere

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

ORDBMS og OODBMS i praksis

Applikasjonsutvikling med databaser

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Datamodellering og databaser SQL, del 2

Integritetsregler i SQL. Primærnøkler

Databaser kort intro. Tom Heine Nätt

Integritetsregler i SQL

Datamodellering og databaser SQL, del 2

1. SQL datadefinisjon og manipulering

Datamodellering og databaser SQL, del 2

I denne leksjonen skal se på hvordan vi bruker innebygde og brukerdefinerte funksjoner.

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

SQL: Systemaspekter. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Systemaspekter V18 1 / 21

Repetisjon: Normalformer og SQL

Bruke SQL fra Python. Med Psycopg2

Integritetsregler i SQL

Sikkerhet og tilgangskontroll i RDBMS-er

Oppgave 1 (Opprett en database og en tabell)

Dagens tema: 12 gode råd for en kompilatorskriver

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Velkommen til INF2100 Jeg er Dag Langmyhr

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

EGENDEFINERTE FUNKSJONER I SAS OG LITT OM OPEN SOURCE INTEGRASJON SAS FANS I STAVANGER , MARIT FISKAAEN (SAS INSTITUTE)

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

Metaspråket for å beskrive grammatikk

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

EKSAMEN 6102 / 6102N DATABASER

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

INF2810: Funksjonell Programmering. En metasirkulær evaluator

MAT1030 Plenumsregning 1

Velkommen til INF2100

Dagens tema: Kjøresystemer II

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

MAT1030 Diskret Matematikk

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Hjemmeeksamen 2 i INF3110/4110

MySQL. Historikk. Nedlasting og installasjon

Videregående programmering 6

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

Hva er Derby og Java DB? Denne forelesningen. Java Database Connectivity (JDBC) Hva er Derby og Java DB?

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

INF 3430/4431. Simuleringsmetodikk

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

1. Introduksjon til Oracle Express Edition

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

SQL: Integritetsregler, triggere og views

Hangman. Level. Introduksjon

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

IN2090 Databaser og datamodellering. 08 Typer og skranker

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

SQL-omgivelser. SQL-omgivelse

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Obligatorisk oppgave 3 i Databaseadministrasjon.

INF3100 V2018 Obligatorisk oppgave nr. 2

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

INF 3430/4430. Simuleringsmetodikk

En lett innføring i foreninger (JOINs) i SQL

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

Dagens tema: Sjekking

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF 3430/4430. Simuleringsmetodikk

Oppgaver Oppgave a: Sett opp mulige relasjoner

Oppgave #1 Tablespacer, Tabeller, Indexer, og Brukere

Java Database Connectivity (JDBC) Norvald H. Ryeng

INF1300 Introduksjon til databaser

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

Delinnlevering 2. INF1050, våren Inge Svale Hauger Handagard (ishandag) Tor Hildrum (thildru)

Metoder med parametre, løkker og arrayer

Lynkurs i shellprogrammering under Linux

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

MAT1030 Diskret matematikk

Eksamen i IBE102 Webutvikling Våren 2017.

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

IN2090 Databaser og datamodellering 07 Datamanipulering

Transkript:

Prosedyrer Lars Vidar Magnusson October 26, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 1 / 19

Repetisjon om triggere og prosedyrer Triggere og prosedyrer ligner på hverandre i forhold til API og syntax, men de skiller seg i hvordan de brukes. Triggere er programkode som blir kjørt ved visse hendelser i en database. Automatisere en velkomstmail når en ny bruker blir lagt til Automatisk legge til rader i en avhengig tabell. Prosedyrer er programkode som vi selv kan eksekvere etter behov. Sjekke database for uønskede kunder Lage forenklede grensesnitt for innsetting i tabeller Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 2 / 19

Fordeler og ulemper med prosedyrer Prosedyrer kan brukes til å legge funksjonalitet i databasen. Dette har en rekke fordeler, men også en del ulemper. Fordeler Kan øke hastigheten siden SQL-spørringene kan kompileres slik at de kjører raskere. Kan spare nettverkstrafikk Kan gjenbrukes fra alle platformer Kan sikres med det integrerte sikkerhetsystemet Ulemper Kan senke den generelle ytelsen til databasen. Kan være vanskelige å uvikle Kan være vanskelige å teste for feil. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 3 / 19

Prosedyrer i MySQL MySQL har et nokså primitivt grensesnitt for å utvikle lagrede prosedyrer, men man kan oppnå mye med litt kreativ bruk. I MySQL deklareres prosedyrer med følgende sytaks. CREATE [ DEFINER = { u s e r CURRENT USER } ] PROCEDURE sp name ( [ [ IN OUT INOUT ] param name t y p e [,... ] ] ) [ c h a r a c t e r i s t i c... ] r o u t i n e b o d y Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 4 / 19

Eksempel på en prosedyre i MySQL Et eksempel på en prosedyre som henter ut alle verdier og rader fra en tabell. DELIMITER // CREATE PROCEDURE G e t A l l V a l u e s ( ) BEGIN SELECT FROM t a b e l l ; END // DELIMITER ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 5 / 19

Eksempel på en prosedyre i MySQL Et eksempel på en prosedyre som henter ut alle verdier og rader fra en tabell. DELIMITER // CREATE PROCEDURE G e t A l l V a l u e s ( ) BEGIN SELECT FROM t a b e l l ; END // DELIMITER ; Denne prosedyre kan kalles med følgende kommando CALL G e t A l l V a l u e s ( ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 5 / 19

Eksempel på en prosedyre med input parameter i MySQL Prosedyrer kan også ta parametere. Prosedyren under tar et input parameter som brukes i et søk etter personer med et gitt etternavn DELIMITER // CREATE PROCEDURE G e t P e r s o n s ( IN lname VARCHAR( 1 2 8 ) ) BEGIN SELECT FROM p e r s o n s WHERE l a s t n a m e=lname ; END // DELIMITER ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 6 / 19

Eksempel på en prosedyre med input parameter i MySQL Prosedyrer kan også ta parametere. Prosedyren under tar et input parameter som brukes i et søk etter personer med et gitt etternavn DELIMITER // CREATE PROCEDURE G e t P e r s o n s ( IN lname VARCHAR( 1 2 8 ) ) BEGIN SELECT FROM p e r s o n s WHERE l a s t n a m e=lname ; END // DELIMITER ; En slik prosedyre kan kalles med følgende kommando CALL G e t P e r s o n s ( Magnusson ) ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 6 / 19

Eksempel på en prosedyre med output parameter i MySQL Denne prosedyren returnerer antallet personer med et gitt etternavn i et output parameter DELIMITER // CREATE PROCEDURE GetNumPersons ( IN lname VARCHAR( 1 2 8 ), OUT num persons INT ) BEGIN SELECT COUNT( i d ) INTO num persons FROM p e r s o n s WHERE l a s t n a m e=lname ; END // DELIMITER ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 7 / 19

Eksempel på en prosedyre med output parameter i MySQL Denne prosedyren returnerer antallet personer med et gitt etternavn i et output parameter DELIMITER // CREATE PROCEDURE GetNumPersons ( IN lname VARCHAR( 1 2 8 ), OUT num persons INT ) BEGIN SELECT COUNT( i d ) INTO num persons FROM p e r s o n s WHERE l a s t n a m e=lname ; END // DELIMITER ; Et ekstra steg må til for å få hentet ut verdien CALL G e t P e r s o n s ( Magnusson, @num persons ) ; SELECT @num persons AS n u m b e r o f p e r s o n s ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 7 / 19

Et siste eksempel på en prosedyre i MySQL Prosedyrer kan også inneholde variable. Her er en prosedyre som returnerer en streng med alle tallene fra 1 til et gitt tall. DELIMITER // DROP PROCEDURE IF EXISTS GetNumString // CREATE PROCEDURE GetNumString ( IN max INT ) BEGIN DECLARE x INT ; DECLARE s t r VARCHAR( 1 0 2 4 ) ; SET x = 1 ; SET s t r = ; WHILE x <= max DO SET s t r = CONCAT( s t r, x,, ) ; SET x = x + 1 ; END WHILE ; SELECT s t r ; END // DELIMITER ; Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 8 / 19

Flere eksempler Mange flere eksempler og mere informasjon kan finnes på http://www.mysqltutorial.org/ Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 9 / 19

Prosedyrer i SQL Server Prosedyrer i SQL Server deklareres med følgende syntaks CREATE { PROC PROCEDURE } [ schema name. ] procedure name [ ; number ] [ { @parameter [ type schema name. ] d a t a t y p e } [ VARYING ] [ = d e f a u l t ] [ OUT OUTPUT ] [READONLY] ] [,... n ] [ WITH <p r o c e d u r e o p t i o n > [,... n ] ] [ FOR REPLICATION ] AS { [ BEGIN ] s q l s t a t e m e n t [ ; ] [... n ] [ END ] } [ ; ] <p r o c e d u r e o p t i o n > ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS C l a u s e ] Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 10 / 19

Eksempel på prosedyre i SQL Server IF OBJECT ID ( DAS. G e t A l l V a l u e s, P ) I S NOT NULL DROP PROCEDURE DAS. G e t A l l V a l u e s ; GO CREATE PROCEDURE DAS. G e t A l l V a l u e s AS SET NOCOUNT ON; SELECT FROM DAS. t a b e l l ; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 11 / 19

Eksempel på prosedyre i SQL Server IF OBJECT ID ( DAS. G e t A l l V a l u e s, P ) I S NOT NULL DROP PROCEDURE DAS. G e t A l l V a l u e s ; GO CREATE PROCEDURE DAS. G e t A l l V a l u e s AS SET NOCOUNT ON; SELECT FROM DAS. t a b e l l ; GO Denne prosedyren kan eksekveres på en av to måter EXECUTE DAS. G e t A l l V a l u e s ; GO EXEC DAS. G e t A l l V a l u e s ; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 11 / 19

Eksempel på en prosedyre med parameter i SQL Server Denne prosedyren henter ut alle personene med samme etternavn. CREATE PROCEDURE DAS. G e t P e r s o n s @LastName n v a r c h a r ( 1 2 8 ) AS SET NOCOUNT ON; SELECT FROM DAS. p e r s o n s WHERE l a s t n a m e = @LastName ; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 12 / 19

Eksempel på en prosedyre med parameter i SQL Server Denne prosedyren henter ut alle personene med samme etternavn. CREATE PROCEDURE DAS. G e t P e r s o n s @LastName n v a r c h a r ( 1 2 8 ) AS SET NOCOUNT ON; SELECT FROM DAS. p e r s o n s WHERE l a s t n a m e = @LastName ; GO Det er flere måter å eksekvere en prosedyre med parametere EXECUTE DAS. G e t P e r s o n s N Magnusson ; GO EXECUTE DAS. G e t P e r s o n s @LastName = N Magnusson ; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 12 / 19

Eksempel på prosedyre med outputparameter i SQL Server Denne prosedyren teller alle personene med samme etternavn. CREATE PROCEDURE DAS. G e t P e r s o n s @LastName n v a r c h a r ( 1 2 8 ), @NumPersons i n t OUT AS SET NOCOUNT ON; SET @NumPersons = SELECT COUNT( i d ) FROM DAS. p e r s o n s WHERE l a s t n a m e = @LastName ; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 13 / 19

Eksempel på prosedyre med outputparameter i SQL Server Denne prosedyren teller alle personene med samme etternavn. CREATE PROCEDURE DAS. G e t P e r s o n s @LastName n v a r c h a r ( 1 2 8 ), @NumPersons i n t OUT AS SET NOCOUNT ON; SET @NumPersons = SELECT COUNT( i d ) FROM DAS. p e r s o n s WHERE l a s t n a m e = @LastName ; GO Output parameterne må lagres i variable DECLARE @NumPersons ; EXECUTE DAS. G e t P e r s o n s N Magnusson, @NumPersons OUT; EXECUTE DAS. G e t P e r s o n s @LastName = N Magnusson, @NumPersons OUT; GO Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 13 / 19

Dokumentasjon av Transact-SQL MSDN biblioteket inneholder god dokumentasjon av stort sett alle aspekter av SQL Server. For dokumentasjon av Transact-SQL gå til http://msdn.microsoft.com/enus/library/bb510741(v=sql.100).aspx. Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 14 / 19

Triggere og prosedyrer i CLR SQL Server støtter CLR integrasjon av triggere og prosedyrer. Dette gjør at man kan skrive triggere med hvilket som helst språk med CLR-støtte. C#, F#, VB, IronPython... Dette gjør det mulig å utvikle triggere og prosedyrer i et skikkelig programmeringspråk. Arrays, klasser, foreach-løkker, bitwise operatorer... Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 15 / 19

Triggere og prosedyrer i CLR SQL Server støtter CLR integrasjon av triggere og prosedyrer. Dette gjør at man kan skrive triggere med hvilket som helst språk med CLR-støtte. C#, F#, VB, IronPython... Dette gjør det mulig å utvikle triggere og prosedyrer i et skikkelig programmeringspråk. Arrays, klasser, foreach-løkker, bitwise operatorer... CLR integrasjonen er typisk ikke påslått per default (Se enabling CLR integration) Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 15 / 19

Eksempel på en trigger i C# Et eksempel på en trigger i C# namespace CLRNamespace { p u b l i c c l a s s CLRTriggers { [ S q l T r i g g e r (Name=@ T e s t T r i g g e r, Target= [ schema ] [ t a b l e ], Event= FOR INSERT, UPDATE, DELETE ) ] p u b l i c s t a t i c v o i d E m a i l A u d i t ( ) { S q l T r i g g e r C o n t e x t t r i g g e r C o n t e x t = S q l C o n t e x t. T r i g g e r C o n t e x t ; i f ( t r i g g e r C o n t e x t. T r i g g e r A c t i o n == T r i g g e r A c t i o n. I n s e r t ) SOME OPERATION ; e l s e i f ( t r i g g e r C o n t e x t. T r i g g e r A c t i o n == T r i g g e r A c t i o n. Update ) SOME OPERATION ; e l s e i f ( t r i g g e r C o n t e x t. T r i g g e r A c t i o n == T r i g g e r A c t i o n. D e l e t e ) SOME OPERATION ; } } } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 16 / 19

Koble opp en CLR trigger For å bruke triggeren må den først kobles opp CREATE TRIGGER T e s t T r i g g e r ON U s e r s FOR INSERT, UPDATE, DELETE AS EXTERNAL NAME CLRNamespace. CLRTriggers. T e s t T r i g g e r Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 17 / 19

Et eksempel på en prosedyre i CLR Et enkelt eksempel på en prosedyre skrevet i C# namespace CLRNamespace { p u b l i c c l a s s CLRProcedures { [ M i c r o s o f t. S q l S e r v e r. S e r v e r. S q l P r o c e d u r e ] p u b l i c s t a t i c v o i d GetNumPersons ( out S q l I n t 3 2 v a l u e ) { u s i n g ( S q l C o n n e c t i o n c o n n e c t i o n = new S q l C o n n e c t i o n ( c o n t e x t c o n { v a l u e = 0 ; c o n n e c t i o n. Open ( ) ; SqlCommand command = new SqlCommand ( SELECT COUNT( i d ) FROM p SqlDataReader r e a d e r = command. E x e c u t e R e a d e r ( ) ; u s i n g ( r e a d e r ) { i f ( r e a d e r. Read ( ) ) v a l u e = r e a d e r. G e t S q l I n t 3 2 ( 0 ) ; } } } } Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 18 / 19

Registrering av CLR prosedyre CLR prosedyrer må også registreres før de kan brukes CREATE PROCEDURE PriceSum (@sum i n t OUTPUT) AS EXTERNAL NAME CLRNamespace. CLRProcedures. GetNumPersons Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 19 / 19