Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
SQL Les 11 16 February 2019
2
Agenda Views Oefeningen Stored Procedures User Defined Functions
Herhaling Views Oefeningen Stored Procedures User Defined Functions Triggers 16 February 2019
3
Herhaling DML SELECT - statement SINGLE ROW FUNCTIONS JOIN
OUTER JOIN INNER JOIN SELF JOIN GROUP FUNCTIONS SUBQUERIES 16 February 2019
4
Herhaling DDL CREATE ALTER DROP TABLE 16 February 2019
5
Herhaling DML TRANSACTIONS INSERT UPDATE DELETE BEGIN TRAN COMMIT
ROLLBACK 16 February 2019
6
Openstaande vraag 1 OUTPUT parameter
Kan het aanmaken van de tabel definitie vermeden worden? JA Voorbeeld in de les: 16 February 2019
7
Openstaande vraag 1 OUTPUT parameter Via temporary table
select * into #afd_ins from afd where 1 = 0 INSERT afd OUTPUT INSERTED.* INTO #afd_ins SELECT ANR+100, naam from afd SELECT * FROM #afd_ins go 16 February 2019
8
Openstaande vraag 2 Bijhouden van historiek van statements uitgevoerd in SQL Server 2008 SQL Profiler Externe tools SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC 16 February 2019
9
Openstaande vraag 3 Beheer van schijfruimte binnen SQL Server
16 February 2019
10
View Er zijn 2 soorten “tabellen”: Bevat geen data! = venster
Fysieke tabellen VIEWS = Logische tabellen gebaseerd op een andere tabel of een andere view. (Derived tables) Bevat geen data! = venster In de databank opgeslaan als een SELECT-statement
11
View (2) Wanneer te gebruiken?
Beperken van de toegang tot een databank Gebruikers toelaten eenvoudige selecties uit te voeren op resulaten bekomen uit ingewikkelde selecties Ophalen van gegevens uit meerdere tabellen Restrict updates of inserts tot bepaalde ranges
12
View (3) Een view mag geen order by bevatten
Opvragen van gegevens gebeurt op dezelfde wijze als voor een tabel ALTER VIEW : wijzigen van een view DROP VIEW : verwijderen van een view 16 februari 2019
13
View - DDL column_list moet gebruikt worden als:
CREATE VIEW view_name [(column_list)] AS select_statement column_list moet gebruikt worden als: Een column in de view gebaseerd is op een group function Dezelfde column naam meer dan één keer voorkomt Alias geven aan een column naam kan ook De wizard in SQL Server kan ook gebruikt worden 16 February 2019
14
View - DDL Aanpassen van een view Verwijderen van een view ALTER VIEW
~ CREATE VIEW Verwijderen van een view DROP VIEW Ook de afhankelijke views worden verwijderd 16 February 2019
15
View - System tables sys.views Standard stored procedures sp_helptext
Ophalen van view definitie 16 February 2019
16
View - DML SELECT INSERT Analoog aan SELECT voor tables
Toevoegen van data aan de onderliggende tabel Missing columns krijgen waarde NULL of de DEFAULT waarde WITH CHECK OPTION Restrict de inserts aan de voorwaarde in de WHERE-clause 16 February 2019
17
View – DML (voorbeeld) WITH CHECK OPTION: create view VW_Afd as
select * from afd where afd.anr < 100 WITH CHECK OPTION insert into VW_Afd values (110,'VERKOOP') 16 February 2019
18
View - DML INSERT niet mogelijk indien
Column lijst met columns van meerdere tabellen Column afgeleid van een group functie De view bevat een group by of distinct statement Column afgeleid van een constante of formula 16 February 2019
19
View - DML UPDATE DELETE ~ INSERT met views ~ DELETE met views
Column afgeleid van een constante of formula wel toegestaan 16 February 2019
20
Oefeningen p 299 Beginners Guide to SQL Server 2008 16 February 2019
21
Procedural extensions
Batch Sequence van SQL Statements Verzonden naar de database om samen uitgevoerd te worden 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 16 February 2019
22
Procedural extensions
IF Statement WHILE Statement BREAK: stopt de complete while loop CONTINUE: stopt de huidige uitvoering van de while loop 16 February 2019
23
Procedural extensions
CASE Statement 16 February 2019
24
Procedural extensions
Locale variabelen Kunnen enkel gebruikt worden in de huidige batch DATATYPE Geheugen reserveren Waarde toekennen = DesiredValue OF = expression FROM table variabelen zijn global variables 16 February 2019
25
Specific statements RETURN GOTO ~ BREAK in WHILE loop
Beëindigt de batch GOTO 16 February 2019
26
Specific statements (2)
RAISERROR Genereer een user-defined error message > 50000 WAITFOR DELAY Een bepaalde periode wachten TIME Tot een bepaald tijdstip wachten TIMEOUT Wachten op een message op een queue 16 February 2019
27
Example WAITFOR int = 1 <= 10 begin WAITFOR DELAY '00:01:00' print getdate() + 1 end 16 February 2019
28
Output Example WAITFOR
16 February 2019
29
Example RAISERROR EXEC sp_addmessage 50005, 10, N'Unvalid System user!'; if SYSTEM_USER = 'EMEA\SSCK2M' print 'APPROVED' else RAISERROR (50005, -- Message id. 10, -- Severity, 1 -- State ) 16 February 2019
30
Example GOTO (from MSDN)
int; = 1; < 10 BEGIN + 1 = 4 GOTO Branch_One --Jumps to the first branch. = 5 GOTO Branch_Two --This will never execute. END Branch_One: SELECT 'Jumping To Branch One.' GOTO Branch_Three; --This will prevent Branch_Two from executing. Branch_Two: SELECT 'Jumping To Branch Two.' Branch_Three: SELECT 'Jumping To Branch Three.' 16 February 2019
31
ERROR Handling Opvangen van fouten in programma’s
Generen van duidelijk error meldingen ‘Proper’ stoppen met de uitvoering van een programma Exception: Een probleem dat het uitvoeren van een programma blokkeert 16 February 2019
32
ERROR Handling TRY/CATCH TRY: CATCH: Opvangen van de exception
Behandelen van de exception 16 February 2019
33
Example TRY/CATCH USE sample; BEGIN TRY END TRY BEGIN CATCH END CATCH
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 16 February 2019
34
Stored Procedure Batch van statements
als object bewaard in de database 16 February 2019
35
Stored Procedure System stored procedures Temporary stored procedures
Eg sp_rename Komen we later op terug Temporary stored procedures Local: start naam met # Gebruik mogelijk door: Huidige user Huidige session Global: start naam met ## Gebruik mogelijk door Alle users Tot de creator’s sessie eindigt 16 February 2019
36
Stored Procedure Gebruik optie OUTPUT om een return waarde te gebruiken 16 February 2019
37
Stored Procedure and CLR
16 February 2019
38
User Defined Functions
Gelijkaardig aan Stored Procedures Een output parameter is verplicht 16 February 2019
39
User Defined Functions
Twee soorten Scalar-valued Eén resultaat Table-valued Een set van rijen als resultaat 16 February 2019
40
TABLE Data Type Vaak gebruikt bij TABLE valued functions
CREATE FUNCTION employees_in_project CHAR(4)) RETURNS TABLE AS RETURN (SELECT emp_fname, emp_lname FROM works_on, employee WHERE employee.emp_no = works_on.emp_no AND project_no 16 February 2019
41
Table – Valued Functions en APPLY
Vergelijkbaar met een join van tabellen CROSS APPLY: ~INNER 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 16 February 2019
42
Oefeningen p. 242 Beginners Guide to SQL Server 2008 16 February 2019
43
Trigger 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 3 delen: Trigger event Trigger condition Trigger action Event kan een DML of DDL statement zijn 16 February 2019
44
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 16 februari 2019
45
DML Trigger Table_name | view_name: FOR | AFTER | INSTEAD OF:
Object waarop de trigger gebouwd wordt FOR | AFTER | INSTEAD OF: Wanneer moet de actie uitgevoerd worden? INSERT | UPDATE | DELETE Na welk event moet de actie gebeuren? 16 February 2019
46
Voorbeeld trigger Veronderstel: We hebben een tabel emp
We hebben een tabel emp_audit, waarin we de operaties op emp willen bijhouden
47
Voorbeeld trigger (2)
48
Inserted and Deleted tables
Twee tabellen onderhouden door het systeem Inserted: Bevat copies van de inserted rijen in de triggered tabel Deleted: Bevat copies van de deleted rijen in de triggered tabel Een UPDATE statement wordt behandeld als een DELETE gevolgd door een INSERT 16 February 2019
49
Toepassingen van DML triggers
Audit van tabellen Implementeren van business rules Referentiële integriteit forceren Meer flexibiliteit dan de referentiële integriteit op tabel level 16 February 2019
50
Sequence van triggers sp_settriggerorder sp_helptrigger
System stored procedure Zetten van de order van de triggers op een tabel Eerst of laatste trigger aanduiden voor een statement type (INSERT, UPDATE, DELETE, …) sp_helptrigger Tonen van eigenschappen van een trigger Niet van toepassing voor INSTEAD OF triggers 16 February 2019
51
DDL Triggers ALL SERVER | DATABASE: EVENT_TYPE
Scope van de trigger (op een database of op de gehele server) EVENT_TYPE 16 February 2019
52
DDL Triggers EVENT_GROUP Verschillen met DML triggers
Verschillen met DML triggers Geen INSERTED en DELETED tabellen Geen INSTEAD OF Scope op een database of Server en niet op een tabel of view 16 February 2019
53
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 16 February 2019
54
Oefeningen op Triggers
p. 385 Beginners Guide to SQL Server 2008 16 February 2019
55
Oefeningen Muziekdatabase 16 februari 2019
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.