Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Relevanta dokument
Innehåll Programability del 1

Innehåll Programability del 1

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Innehåll Programability Del 2

1.Lär känna MS SQL Observera. Tips. Förberedelse

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Structured query language (SQL)

Övningar i SQL. SQLAccess.doc Ove Lundgren

Starta MySQL Query Browser

Skapa exempeldatabasen

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

TENTAMEN DATABASKUNSKAP ITEK12

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

INNEHÅLL SQL DEL 2. Funktioner inbyggda Aggregatfunktioner Skalärfunktioner. Chapter 11. Beginning SQL Server 2008 for Developers

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

WCMS-15, Webbutvecklare CMS

Det är fullt tillåtet att göra laborationen innan laborationstillfället.

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Se kurshemsidan för användbara länkar för att genomföra denna laboration.

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

Laboration 2, MS SQL. Observera. Tips. Förberedelse. Genomförande

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Sample exam questions. Database exam TIG058

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

Databaser och Datamodellering Foreläsning IV

Databaser. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

VAD GÖR DU / VEM ÄR DU?

Funktionsbeskrivning

Introduktion MySQL och MariaDB

Filbeskrivningar Eller på särskild CD skiva

Databasapplikationen HYR AKS. Vers 1.0 6, AKS har framtagits av ApplData AB på uppdrag av TillSaluGrejorAB

Stored procedure i ASP.NET

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Labb LABB 14. Live demo exempeldata. Plushögskolan Frågeutveckling inom MSSQL - SU14

1. PLSQL 2 2. Select into

Stored procedure i ASP.NET

Databasutveckling Introduktion till SQL och TSQL

Innehåll Security. Chapter 4 och 7 Beginning SQL Server 2008 for Developers

VAD GÖR DU / VEM ÄR DU?

Logisk modell. Fysisk modell. Datamodeller Konceptuell modell

Modul DB1-3 Datamodellering

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

MySQL - testmiljöer på minuter. Thomas Johansson IT-avdelningen

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

Vyer, Prepared Statements, Triggers

Innehåll MySQL Intro. Ex på ett index Index typer ISAM Balanserat träd Pk och Fk i MySQL Eget index För o nackdelar med index

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Design och underhåll av databaser

Tentamen 4,5 hp Delkurs: Databaser och databasdesign 7,5hp Tentander: VIP2, MMD2, INF 31-60, ASP

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Lösningsförslag, tentamen i Databaser

Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.

Introduktion till MySQL

Innehåll MySQL Intro. Historik / Utveckling Produkter Primära delsystem Installation Tabell och datatyper Namnsättning

1. SQL DDL (Data Definition Language) 2. Skapa tabell

Vad är SQL? Introduktion till SQL

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...

Ett arbetsexempel Faktureringsrutin

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Databasutveckling Tabeller. tinyint 1 byte (0-255) Upp till 8 bytes

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

Introduktion till Jasmine 1.2 ODQL

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

732G16: Databaser - Design och programmering

ADO.NET Murach Kapitel 17-20

Föreläsning 2: Översikt över ett databassystem

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Föreläsning 6 Databaser och säkerhet

9. :new och :old -värden 10. Triggerns olika delar 11. Olika typer av triggrar 12. Kodexempel. Pär Douhan,

Exempel-Tentamen III

INTRODUKTION TILL JDBC

Vad är en databas? Databasutveckling Med MySQL/MariaDB

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Prova på-laboration i SQL

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

Tentamen för DD1370 Databasteknik och informationssystem

Databaser och SQL - en kort introduktion

Classpath. Class loading + resurser. Class loader. jar-filer

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Klientprogrammering mot databaser

3. Dynamiska webbplatser, 20 Yhp (4 v)

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

MySQL. Maths Göthe. 25 februari Inledning Några konventioner Licens... 2

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Transkript:

Innehåll MySQL Intro Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata 1

Lagrad procedur / Stored Procedure Lagrad procedur har många namn, förkortningen sproc används ofta. En lagrad procedur är ett avsnitt av SQL/program-kod. Oftast använder man sproc för att automatisera sina databasapplikationer. Man skickar inte data direkt till tabellerna utan låter alla data gå från webbmiljön via sproc till tabellerna. Lagrade procedurer är mycket kraftfulla och kan lösa många problem. En lagrad procedur används ofta för att lösa säkerhetsproblem exempelvis SQL-injections. I MySQL se hjälpen i Query Browser. I MSSQL se länken som leder till SQL Server Developer Center 2

Lagrad procedur / Stored Procedure Går snabbare att köra än vanlig SQL, koden är redan kompilerad. Återanvändning av kod. Ökad säkerhet, det går att styra rättigheter för procedurer. Man kan låta affärslogiken ligga i databasen. Reducerad nätverkstrafik. Bättre säkerhet. Enklare installation. Endast en kopia på servern ingen på klienten. 3

Lagrad procedur En enkel lagrad procedur kan se ut enligt nedan. Uppgiften för den är att visa en lista på kunderna. CREATE PROCEDURE KollaKunder() SELECT Namn, Adress, Postnr, Ort FROM Kund; Först kör du koden enligt ovan vilket gör att din lagrade procedur skapas så den finns tillgänglig sedan. Kör sedan med följande rad. Du måste börja med anropet CALL. Resultatet får du som en lista på det du har i SQL-satsen. CALL Kollakunder 4

Skapa en Lagrad Procedur 1 2 3 Högerklicka på databasen som du vill knyta den lagrade proceduren till. Välj Create New Procedure / Function Du får en del färdig kod. Anpassa innehållet. Exempelvis: DROP PROCEDURE IF EXISTS KollaKunder $$ CREATE PROCEDURE KollaKunder () SELECT Namn, Adress, Postnr, Ort FROM Kund; 4 Kör koden så skapas den lagrade proceduren och färdig att användas. OBS! Du kanske måste se till att din databas är Default 5 CALL Kollakunder() 5

Några nyckelord i MySQL SQL Avgränsare mellan avsnitt är $$. DROP PROCEDURE IF EXISTS / END USE DECLARE SET Istället för att använda ALTER så raderas proceduren (om den finns) innan den skapas på nytt. Börjar o slutar SQL genomförande avsnittet. Anger vilken databas som ska användas USE Faktura Definierar en variabel. DECLARE antal INTEGER Set värde i variabel. SET antal=4 Med default värde DECLARE antal INTEGER Default 25; LAST_INSERT FOUND_ROWS Returnerar sista/högsta värdet I Pk. Räknare. Hur många rader har returnerats /* bla bla */ Kommentera flerradigt Tilldela en variabel värde med SELECT. Variabeln får inte heta samma som fältet. Exempel: SELECT Pris From Artikel WHERE Artikelid=Artid INTO Priset; 6

Använda Parameter som indata Antag att du vill skicka med data så att endast en viss kund visas med sina uppgifter. Komplettera med en parametern Kundnr och vilken datatyp den har. OBS! om du ska ändra befintlig högerklicka på den och välj Edit Procedure. IN-data till sproc OUT/INOUT) DROP PROCEDURE IF EXISTS KollaKunder $$ CREATE PROCEDURE KollaKunder (IN id integer) SELECT Namn, Adress, Postnr, Ort FROM Kund WHERE Kundid=id; Namn på param datatyp för param CALL KollakunderEnViss (1) Parametervärde OBS! Tänk på datatypen. Ett textfält/sträng omgärdas av apostrof ( ) 7

Alla eller en speciell? DROP PROCEDURE IF EXISTS KollaKunder $$ CREATE PROCEDURE KollaKunder (IN id integer) DECLARE Kundnr INTEGER Default id; IF Kundnr=0 THEN /* Lista alla kunder */ SELECT Namn, Adress, Postnr, Ort FROM Kund; ELSE /* Lista en kund */ SELECT Namn, Adress, Postnr, Ort FROM Kund WHERE Kundid=Kundnr; END IF; Kundnr tilldelas värdet av id CALL Kollakunder (0) Ger alla kunderna CALL Kollakunder (2) visar kund med kundid=2 8

Ny fakturarad Lägga till en ny fakturarad. Hämta data ur artikel och uppdaterar artikel. Eftersom uppdatering måste ske i två tabeller används transactions. CREATE PROCEDURE FakturaRadNy $$ ( IN Faktid int, IN Artid int, IN Ant int,in Rabatt Decimal(2,2), IN Momsid int ) DECLARE Priset Decimal(6,2) Default 0; SELECT Pris From Artikel WHERE Artikelid=Artid INTO Priset; START TRANSACTION; /* OBS! Start istället för */ INSERT INTO Fakturarad (Fakturaid,Artikelid,Antal,Pris,rabatt,momsid) VALUES (Faktid,Artid,Ant,Priset,Rabatt,Momsid); UPDATE Artikel Set Antal=Antal-Ant WHERE Artikelid=Artid; COMMIT; CALL FakturaradNy(6,104,2,0.05,1) 9

Radera Fakturarad Radera en fakturarad och samtidigt uppdatera artikel med antal. Två tabeller ska uppdateras därför använder vi transactions. CREATE PROCEDURE FakturaRadRadera $$ ( IN Faktid int, IN Artid int, IN ANT int ) START TRANSACTION; UPDATE Artikel Set Antal=Antal+Ant WHERE Artikelid=Artid; DELETE From Fakturarad WHERE Fakturaid=Faktid AND Artikelid=Artid COMMIT; CALL FakturaRadRadera (6,104,2) 10

Ett exempel Det är ofta som man vill göra en simulering av värden från flera tabeller. Då skapar man en ny tabell, temporär, och för över data från andra tabeller. Därefter behandlar man data i den nya tabellen för att till sist kasta tabellen. Exempel: Vi vill ha en lista på hur mycket våra kunder har handlat och när det har handlat. Vilken kund har handlat vad och hur mycket. Följande steg gör man då med en lagrad procedur: 1. Skapar den nya tabellen (CREATE. 2. Överför data från andra tabeller (INSERT INTO.. 3. Behandlar data (SELECT.. 4. Slutligen raderar tabellen (DROP En kortversion av den lagrade proceduren finns på nästa sida 11

sproc KundStatistikLista DROP PROCEDURE IF EXISTS KundStatistikLista $$ CREATE PROCEDURE KundStatistikLista () CREATE Temporary Table Temp ( Eid int Primary Key AUTO_INCREMENT, Namn varchar(50) NOT NULL, Ort varchar(30) NOT NULL, Datum date NOT NULL, ArtikelID int NOT NULL, Antal smallint, Pris Decimal(8,2) ); INSERT INTO Temp (namn,ort,datum,artikelid, antal, pris) SELECT k.namn, k.ort, f.datum, fa.artikelid, fa.antal, fa.pris FROM Kund as k INNER JOIN Faktura as f ON k.kundid=f.kundid INNER JOIN Fakturarad as fa ON f.fakturaid=fa.fakturaid; SELECT * From Temp; DROP Table Temp; 12