De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

SQL Les 11 16 February 2019.

Verwante presentaties


Presentatie over: "SQL Les 11 16 February 2019."— Transcript van de presentatie:

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


Download ppt "SQL Les 11 16 February 2019."

Verwante presentaties


Ads door Google