1 July 2015 1 SQL Les 12. 1 July 2015 2 Agenda Herhaling Herhaling Stored Procedures Stored Procedures Oefeningen Oefeningen User Defined Functions User.

Slides:



Advertisements
Verwante presentaties
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
Advertisements

PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Het selecteren van data uit meerdere gekoppelde tabellen
VBA en VBS Een introductie.
LauwersCollege Buitenpost Informatica
Inleiding Databanken: oefeningen 4 Sven Casteleyn 4 Lokaal: 6G HomePage: te bereiken via
Hoofdstuk 6: Controle structuren
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Relationele databases: Fysiek databaseontwerp en SQL
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Vorige week: Referentiele integriteit
Workshop PHP Een productencatalogus Met database.
Event Handling in Embedded Systems.  Wat is een event?  Welke events zijn het meest “time-critical”?  Welke toestand wordt door de CPU opgeslagen?
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
LauwersCollege Buitenpost Informatica
Inleiding in de statistiek voor de gedragswetenschappen
Deltion College Engels B1 Gesprekken voeren [Edu/006] thema: Look, it says ‘No smoking’… can-do : kan minder routinematige zaken regelen © Anne Beeker.
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Hoofdstuk 3 - Conditionele logica
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
Deltion College Engels B2 Schrijven [Edu/005] thema: Writing a hand-out can-do: kan een begrijpelijke samenvatting schrijven © Anne Beeker Alle rechten.
2 August SQL Les August Agenda Herhaling Herhaling Cursors Cursors MS SQL Server and MS Excel MS SQL Server and MS Excel Oefeningen.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Analyse 3 INFANL01-3 week 3 CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3. Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal.
ANALYSE 3 INFANL01-3 WEEK 8 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Herhaling ▸ Normaliseerregels ▸ Omzetten ERD ▸ Group by en SET ▸ Proeftentamen.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
ANALYSE 3 INFANL01-3 WEEK 6 CMI Informatica. ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Subqueries met correlaties ▸ Subqueries zonder correlaties ▸ Views ▸
1 KPN Mobiel – Introductie Repository Object Browser & Designer 10 Designer 10g & Repository Object Browser Maandag 28 februari 2005 Lucas Jellema (AMIS)
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Les CMMN V1.0. Inhoud: 1. Doel SOTA 2. CMMN (en DMN) in het grote geheel 3. Basisbeginselen CMMN.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Loops en errors Array's Random try catch for loop while loop do while loop.
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
SQL Performance Analyzer Inschatten performance impact van wijzigingen Bram van der Vos
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
LPI 1.05 Marcel Nijenhof. Agenda ● Customize and use the shell environment ● Customize or write simple scripts ● SQL data management.
DBS22 - Recap PL/SQL Wilrik R1_4.44
Robby de Robot. Javascript Tot nu toe gebruikt: – document.write(" Hello World "); – alert("tekst") – Toon een waarschuwingsvenster – prompt("tekst",
– Software development fundamentals
SQL Cursus deel
Key Process Indicator Sonja de Bruin
Programmeren met Reeksen
Performance Tuning SSIS packages
LauwersCollege Buitenpost Informatica
Moving objects in a geo-DBMS
Software Development fundamentals
Software Development fundamentals
SQL Les February 2019.
SQL Les February 2019.
SQL Les 3 17 February 2019.
SQL Les 3 23 February 2019.
SQL Les 7 24 February 2019.
Database connect formulieren 1 februari 2016.
SQL Les 1 5 April 2019.
SQL Les 6 14 April 2019.
SQL Les 9 12 May 2019.
SQL Les 4 12 May 2019.
– Software development fundamentals
SQL Les May 2019.
ERD maken.
Software Development fundamentals
Transcript van de presentatie:

1 July SQL Les 12

1 July Agenda Herhaling Herhaling Stored Procedures Stored Procedures Oefeningen Oefeningen User Defined Functions User Defined Functions Triggers Triggers Oefeningen Oefeningen

Herhaling DML DML SELECT - statement SELECT - statement SINGLE ROW FUNCTIONS SINGLE ROW FUNCTIONS JOIN JOIN OUTER JOIN OUTER JOIN INNER JOIN INNER JOIN SELF JOIN SELF JOIN GROUP FUNCTIONS GROUP FUNCTIONS SUBQUERIES SUBQUERIES 1 July

Herhaling DDL DDL CREATE CREATE ALTER ALTER DROP DROP TABLE TABLE 1 July

Herhaling DML DML INSERT INSERT UPDATE UPDATE DELETE DELETE TRANSACTIONS TRANSACTIONS BEGIN TRAN BEGIN TRAN COMMIT COMMIT ROLLBACK ROLLBACK 1 July

Herhaling DDL DDL VIEW VIEW PROCEDURELE EXTENSIONS PROCEDURELE EXTENSIONS STORED PROCEDURES STORED PROCEDURES USER DEFINED FUNCTIONS USER DEFINED FUNCTIONS TRIGGERS TRIGGERS 1 July

View Er zijn 2 soorten “tabellen”: Er zijn 2 soorten “tabellen”: Fysieke tabellen Fysieke tabellen VIEWS = Logische tabellen gebaseerd op een andere tabel of een andere view. (Derived tables) VIEWS = Logische tabellen gebaseerd op een andere tabel of een andere view. (Derived tables) Bevat geen data! Bevat geen data! = venster = venster In de databank opgeslaan als een SELECT- statement In de databank opgeslaan als een SELECT- statement Restricted DMLs possible Restricted DMLs possible

Procedural extensions Batch Batch Sequence van SQL Statements Sequence van SQL Statements Verzonden naar de database om samen uitgevoerd te worden Verzonden naar de database om samen uitgevoerd te worden Om DDL statements van elkaar te scheiden, dient gebruik gemaakt te worden van GO Om DDL statements van elkaar te scheiden, dient gebruik gemaakt te worden van GO Gebruik BEGIN en END om een block van statements aan te geven Gebruik BEGIN en END om een block van statements aan te geven 1 July

Procedural extensions IF Statement IF Statement WHILE Statement WHILE Statement BREAK: stopt de complete while loop BREAK: stopt de complete while loop CONTINUE: stopt de huidige uitvoering van de while loop CONTINUE: stopt de huidige uitvoering van de while loop 1 July

Procedural extensions CASE Statement CASE Statement 1 July

Procedural extensions Locale variabelen Locale variabelen Kunnen enkel gebruikt worden in de huidige batch Kunnen enkel gebruikt worden in de huidige batch DATATYPE DATATYPE Geheugen reserveren Geheugen reserveren Waarde toekennen Waarde toekennen = DesiredValue = DesiredValueOF = expression FROM table = expression FROM table variabelen zijn global variables variabelen zijn global variables 1 July

Specific statements RETURN RETURN ~ BREAK in WHILE loop ~ BREAK in WHILE loop Beëindigt de batch Beëindigt de batch GOTO GOTO 1 July

Specific statements (2) RAISERROR RAISERROR Genereer een user-defined error message Genereer een user-defined error message > > WAITFOR WAITFOR DELAY DELAY Een bepaalde periode wachten Een bepaalde periode wachten TIME TIME Tot een bepaald tijdstip wachten Tot een bepaald tijdstip wachten TIMEOUT TIMEOUT Wachten op een message op een queue Wachten op een message op een queue 1 July

Example WAITFOR int = 1 <= 10 begin WAITFOR DELAY '00:01:00' print getdate() + 1 end 1 July

Output Example WAITFOR 1 July

Example RAISERROR EXEC sp_addmessage 50005, 10, N'Unvalid System user!'; N'Unvalid System user!'; if SYSTEM_USER = 'EMEA\SSCK2M' print 'APPROVED' else RAISERROR (50005, -- Message id. 10, -- Severity, 10, -- Severity, 1 -- State 1 -- State) 1 July

Example GOTO (from MSDN) int; = 1; < 10 BEGIN = 4 GOTO Branch_One --Jumps to the first branch. = 4 GOTO Branch_One --Jumps to the first branch. = 5 GOTO Branch_Two --This will never execute. = 5 GOTO Branch_Two --This will never execute.ENDBranch_One: SELECT 'Jumping To Branch One.' SELECT 'Jumping To Branch One.' GOTO Branch_Three; --This will prevent Branch_Two from executing. GOTO Branch_Three; --This will prevent Branch_Two from executing.Branch_Two: SELECT 'Jumping To Branch Two.' SELECT 'Jumping To Branch Two.'Branch_Three: SELECT 'Jumping To Branch Three.' SELECT 'Jumping To Branch Three.' 1 July

ERROR Handling Opvangen van fouten in programma’s Opvangen van fouten in programma’s Generen van duidelijk error meldingen Generen van duidelijk error meldingen ‘Proper’ stoppen met de uitvoering van een programma ‘Proper’ stoppen met de uitvoering van een programma Exception: Exception: Een probleem dat het uitvoeren van een programma blokkeert Een probleem dat het uitvoeren van een programma blokkeert 1 July

ERROR Handling TRY/CATCH TRY/CATCH TRY: TRY: Opvangen van de exception Opvangen van de exception CATCH: CATCH: Behandelen van de exception Behandelen van de exception 1 July

Example TRY/CATCH USE sample; BEGIN TRY BEGIN TRANSACTION insert into employee values(11111, 'Ann', 'Smith','d2'); insert into employee values(22222, 'Matthew', 'Jones','d4'); -- referential integrity error insert into employee values(33333, 'John', 'Barrimore', 'd2'); COMMIT TRANSACTION PRINT 'Transaction committed' END TRY BEGIN CATCH ROLLBACK PRINT 'Transaction rolled back' END CATCH 1 July

Stored Procedure Batch van statements Batch van statements als object bewaard in de database als object bewaard in de database 1 July

Stored Procedure System stored procedures System stored procedures Eg sp_rename Eg sp_rename Komen we later op terug Komen we later op terug 1 July

Stored Procedure Gebruik optie OUTPUT om een return waarde te gebruiken Gebruik optie OUTPUT om een return waarde te gebruiken 1 July

Stored Procedure and CLR 1 July

Oefening Op DB MYFIRSTDB Op DB MYFIRSTDB Schrijf een stored procedure delete_afd met als argument een afdelingsnummer. Schrijf een stored procedure delete_afd met als argument een afdelingsnummer. Breidt de procedure uit zodat de afdeling enkel wordt verwijderd uit de tabel indien de afdeling minstens 5 medewerkers bevat Breidt de procedure uit zodat de afdeling enkel wordt verwijderd uit de tabel indien de afdeling minstens 5 medewerkers bevat Test de Stored Procedure uit. Test de Stored Procedure uit. Schrijf een stored procedure insert_afd die records toevoegt in de tabel afd. Schrijf een stored procedure insert_afd die records toevoegt in de tabel afd. 1 July

Oefening Schrijf een stored procedure die een datetime als parameter meekrijgt. Schrijf een stored procedure die een datetime als parameter meekrijgt. De stored procedure moet wachten tot het tijdstip in de parameter en vervolgens start naar het scherm schrijven. De stored procedure moet wachten tot het tijdstip in de parameter en vervolgens start naar het scherm schrijven. Test de stored procedure Test de stored procedure 1 July

Oefening Schrijf een stored procedure die de referentiële integriteit op de MYFIRSTDB checkt. Schrijf een stored procedure die de referentiële integriteit op de MYFIRSTDB checkt. 1 July

User Defined Functions Gelijkaardig aan Stored Procedures Gelijkaardig aan Stored Procedures Een output parameter is verplicht Een output parameter is verplicht 1 July

User Defined Functions Twee soorten Twee soorten Scalar-valued Scalar-valued Eén resultaat Eén resultaat Table-valued Table-valued Een set van rijen als resultaat Een set van rijen als resultaat 1 July

TABLE Data Type Vaak gebruikt bij TABLE valued functions Vaak gebruikt bij TABLE valued functions CREATE FUNCTION employees_in_project CHAR(4)) RETURNS TABLE ASRETURN (SELECT emp_fname, emp_lname FROM works_on, employee WHERE employee.emp_no = works_on.emp_no AND project_no 1 July

Table – Valued Functions en APPLY Vergelijkbaar met een join van tabellen Vergelijkbaar met een join van tabellen CROSS APPLY: ~INNER JOIN CROSS APPLY: ~INNER JOIN OUTER APPLY: ~OUTER JOIN OUTER APPLY: ~OUTER JOIN create function AS INT) RETURNS TABLE AS RETURN SELECT job FROM works_on WHERE emp_no AND job IS NOT NULL AND project_no = 'p1'; SELECT E.emp_no, emp_fname, emp_lname, job FROM employee as E CROSS APPLY dbo.fn_getjob(E.emp_no) AS A 1 July

Trigger Een opzichzelf bestaande routine afhankelijk van een bepaalde tabel of view Een opzichzelf bestaande routine afhankelijk van een bepaalde tabel of view Trigger zorgt voor het uitvoeren van een actie indien er een event gebeurt op een tabel of view Trigger zorgt voor het uitvoeren van een actie indien er een event gebeurt op een tabel of view 3 delen: 3 delen: Trigger event Trigger event Trigger condition Trigger condition Trigger action Trigger action Event kan een DML of DDL statement zijn Event kan een DML of DDL statement zijn 1 July

Trigger (2) Nadelen van triggers Triggers zijn onzichtbaar voor client application Het is niet altijd makkelijk de logica te volgen (before/after) Triggers kunnen al eens vergeten worden. Zeker als er geen documentatie over bestaat Triggers lopen steeds als een DML commando op een tabel wordt uitgevoerd. Dit kan gevolgen hebben voor de performance 1 juli

DML Trigger Table_name | view_name: Table_name | view_name: Object waarop de trigger gebouwd wordt Object waarop de trigger gebouwd wordt FOR | AFTER | INSTEAD OF: FOR | AFTER | INSTEAD OF: Wanneer moet de actie uitgevoerd worden? Wanneer moet de actie uitgevoerd worden? INSERT | UPDATE | DELETE INSERT | UPDATE | DELETE Na welk event moet de actie gebeuren? Na welk event moet de actie gebeuren? 1 July

Voorbeeld trigger Veronderstel: Veronderstel: We hebben een tabel emp We hebben een tabel emp We hebben een tabel emp_audit, waarin we de operaties op emp willen bijhouden We hebben een tabel emp_audit, waarin we de operaties op emp willen bijhouden

Voorbeeld trigger (2)

Inserted and Deleted tables Twee tabellen onderhouden door het systeem Twee tabellen onderhouden door het systeem Inserted: Inserted: Bevat copies van de inserted rijen in de triggered tabel Bevat copies van de inserted rijen in de triggered tabel Deleted: Deleted: Bevat copies van de deleted rijen in de triggered tabel Bevat copies van de deleted rijen in de triggered tabel Een UPDATE statement wordt behandeld als een DELETE gevolgd door een INSERT Een UPDATE statement wordt behandeld als een DELETE gevolgd door een INSERT 1 July

Toepassingen van DML triggers Audit van tabellen Audit van tabellen Implementeren van business rules Implementeren van business rules Referentiële integriteit forceren Referentiële integriteit forceren Meer flexibiliteit dan de referentiële integriteit op tabel level Meer flexibiliteit dan de referentiële integriteit op tabel level 1 July

Sequence van triggers sp_settriggerorder sp_settriggerorder System stored procedure System stored procedure Zetten van de order van de triggers op een tabel Zetten van de order van de triggers op een tabel Eerst of laatste trigger aanduiden voor een statement type (INSERT, UPDATE, DELETE, …) Eerst of laatste trigger aanduiden voor een statement type (INSERT, UPDATE, DELETE, …) sp_helptrigger sp_helptrigger Tonen van eigenschappen van een trigger Tonen van eigenschappen van een trigger Niet van toepassing voor INSTEAD OF triggers Niet van toepassing voor INSTEAD OF triggers 1 July

DDL Triggers ALL SERVER | DATABASE: ALL SERVER | DATABASE: Scope van de trigger (op een database of op de gehele server) Scope van de trigger (op een database of op de gehele server) EVENT_TYPE EVENT_TYPE us/library/bb aspx us/library/bb aspx us/library/bb aspx us/library/bb aspx 1 July

DDL Triggers EVENT_GROUP EVENT_GROUP us/library/bb aspx us/library/bb aspx us/library/bb aspx us/library/bb aspx Verschillen met DML triggers Verschillen met DML triggers Geen INSERTED en DELETED tabellen Geen INSERTED en DELETED tabellen Geen INSTEAD OF Geen INSTEAD OF Scope op een database of Server en niet op een tabel of view Scope op een database of Server en niet op een tabel of view 1 July

Example DDL Trigger USE sample; GO CREATE TRIGGER prevent_drop_triggers ON DATABASE FOR DROP_TRIGGER AS PRINT 'You must disable "prevent_drop_triggers" to drop any trigger' ROLLBACK 1 July

Oefeningen op Triggers p. 385 Beginners Guide to SQL Server 2008 p. 385 Beginners Guide to SQL Server July

Oefeningen Herhalingsoefeningen Herhalingsoefeningen 1 juli