SQLHiA DAT 2800 Databaser I Prosedyrer / Triggere.

Slides:



Advertisements
Liknende presentasjoner
Mer om SQL-spørringer og funksjoner
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Hans Olav Norheim
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk.
Mange til mange sammenhengen
Kap 02 Relasjonsdatabaser
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
TIF seminar -Visual Basic (VBA) og RExcel Elisabeth Orskaug Norsk Regnesentral Oslo, 8. november 2011.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Avansert SQL og problemløsning
Databaser Verktøybok om Access med innslag av Frontpage: Snarveien til Access.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
SQLHiA Data-integritet. SQLHiA Data integritet Påkrevde data:Noen kolonner i en database-tabell må ha en eller annen verdi. Dette gjøres ved å sette NOT.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
C# for javaprogrammerere
En gang til!? .
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
INF150 Programmering mandag 11.9
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
Standard databasespråk
1 Kap 02 Relasjonsdatabaser. Data-organisering - Manuelt Ansatte Pasienter Utstyr Økonomi Avdelinger RøntgenOnkologisk.
SQLHiA Kap 12 Dynamisk SQL. SQLHiA SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer.
DAG HOFTUN KNUTSEN Bruk og misbruk av SQL DAG HOFTUN KNUTSEN
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
ADA 95 – del3 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Structured Query Language Kræsj-kurs
Høgskolen i Oslo Webprogrammering Java-scripting 2 Klientvalidering.
Triggere Mutasjoner i basen. Triggers Triggers are stored procedures that execute automatically when something (event) happens in the database: : data.
Instead-of-trigger Faglig forum. Instead-of-trigger Problem: En har et VIEW som består av mange JOINs. Komplekst å oppdatere alle tabellene som inngår.
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Dynamiske nettsider PHP Del 4 – Eksterne datakilder.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Introduksjon I126 Databaser og datamodellering Høsten 2000 Institutt for informatikk Universitet i Bergen.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
KAP. 12 Hypertext Implementasjon Roy Kjellid & Tor Andre Kvinge Inf 329.
Databaser II – Online bokdatabase
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Database tilgang Opret forbindelse til din Ms SQL database inde i Visual Studio fra Server Explorer vinduet.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
1 Pointere, referencer, struct’s mv.. 2 Erklæringer Eksempel på erklæringer int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Informasjonssystem for tannlege Kloster-Jensen
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Upload av bildefiler Utdrag fra ImageIn Ved Kirsten Klæbo Tirsdag 25/11-03.
Inf1000 (Uke 5) Arrayer, filer og tekst
SPSS-kurs. Program Dagen vil bli delt inn i fire bolker: Bolk 1 - 9:30-10:30 – Åpne/lagre datasett, datatyper, definere variable. Bolk 2 – 10:45-11:30.
Android-Programmering Våren Oversikt Long-running operasjoner Introduksjon til Android services On-demand service Bruk av servicer på tvers av prosesser.
SPSS-kurs.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Expression web. Front Page vs Expression web ● Front Page er ute ● Undervisning i Front Page er undervisning i gammeldags teknologi i forhold til standarder.
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
PL/SQL تعريف المتغيرات
Database.
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

SQLHiA DAT 2800 Databaser I Prosedyrer / Triggere

SQLHiA Eksempel på innhold i en database Tables Indexes Triggers Views Procedures Rules Datatypes Defaults Database

SQLHiA STORED COMMAND STORED COMMAND:Kompilert lagret SQL-kommando Eks fra SQLTalk: STORE SC_01 SELECT SNrID, Navn, PNr FROM Selger EXECUTE SC_01 SELECT … FROM SYSCOMMANDS WHERE NAME = ’…’ ERASE SC_01

SQLHiA PROCEDURE-Hva er en prosedyre ? En SQLBase prosedyre er et sett av: - SQL statements - SAL statements som er tilegnet et navn, kompilert og vanligvis lagret i SQLBase.

SQLHiA PROCEDURE-Static / Dynamic En SQLBase prosedyre kan være: - Static Lagres ved parsing / prekompilering før eksekvering. - Dynamic Inneholder dynamisk SQL som parses/kompileres ved eksekvering og må ikke nødvendigvis lagres før eksekvering.

SQLHiA PROCEDURE- Ulike prosedyre-implementeringer - Stored procedure Kompileres og lagres i databasen for seinere eksekvering. Kan være statisk eller dynamisk. Triggere og Events kan defineres i lagrede prosedyrer. - Non-stored procedure Kompileres for umiddelbar eksekvering. - Inline procedure Benyttes vanligvis i triggere. INLINE clause i CREATE TRIGGER kommando.

SQLHiA PROCEDURE-Hvorfor prosedyrer ? - Forenkling av applikasjon ved overføring av prosessering til server - Reduserer nettverkstrafikk - Større sikkerhetsfleksibilitet - Bedring av runtime gjenfinningshastighet (performance) - Sentralisert database-administrasjon - Kan eksekveres fra ulike front-ends: SQLTalk, Team Developer, Web Developer, SQL/API,...

SQLHiA PROCEDURE-Format PROCEDURE:ProcedureName Parameters … Local Variables... Actions On Procedure Startup... On Procedure Execute... On Procedure Fetch... On Procedure Close... Viktig med innrykk. Kan benytte Begin / End. 1. Kallende program kompilerer prosedyren. 2. Kallende program eksekverer prosedyren første gang. 1. Kallende program eksekverer prosedyren. 2. Procedure Startup er prosessert. 1. Kallende program utfører en Fetch kommando. Må finnes hvis multiple rader skal hentes. Benytt Return 0 ved Fetch Ok, 1 ved Fetch avsluttet. 1. Ved Disconnect kommando eller ved kompilering av ny kommando til samme SqlHandle. Utføres når følgende er oppfylt: Hele Action-delen utføres hvis ingen On ProcedureState finnes.

SQLHiA PROCEDURE-Eksempel PROCEDURE: Selger Parameters Receive Number : nSNrID Receive String: sNavn Number: nPNr Local Variables Sql Handle: hSql String: sSelect Number: nInd Actions On Procedure Startup Call SqlConnect (hSql) Set sSelect = ‘SELECT SNrID, Navn INTO :nSNrID, :sNavn FROM Selger WHERE PNr = :nPNr’ Call SqlPrepare (hSql, sSelect) On Procedure Execute Call SqlExecute (hSql) On Procedure Fetch If NOT SqlFetchNext (hSql, nInd) Return 1 Else Return 0 On Procedure Close Call SqlDisconnect (hSql)

SQLHiA PROCEDURE-STORE Lagring av prosedyrer: STORE prName PROCEDURE prNameP STATIC/DYNAMIC... bOk = SqlStore ( hSql, strName, strSqlCommand ) prName og prNameP vil vanligvis (men må ikke) være like. DYNAMIC er default.

SQLHiA PROCEDURE-STATIC Static prosedyrer: Kompileres, optimaliseres (bestemmelse av applikasjonsplan) og lagres i databasen. Både statementene og applikasjonsplanen lagres i systemkatalogene. Static prosedyrer må lagres før eksekvering. Følgende krav må være oppfylt for Static prosedyrer: -Må ikke inneholde DDL statement (CREATE, ALTER, DROP, …) -Statementene er strenger som ikke inneholder variabler bortsett fra Bind- eller INTO -variabler.

SQLHiA PROCEDURE-Trekk ved Dynamic / Static prosedyre Trekk Dynamic Static Require storing to execute ? No Yes Parese / Precompile procedure logic ? Yes Parse SQL at store time ? No Yes Precompile SQL at store time ? No Yes Dynamic SQL support ? Yes No SQL performance Slower Faster Use for Triggers and Events No Yes Performance of Dynamic procedures can be enhanced by retrieving previously stored SQL procedures/commands (SqlRetrieve as opposed to SqlPrepare).

SQLHiA PROCEDURE-Datatyper Datatype Default Kommentar Boolean FALSE Sql Handle Ingen Kun lokale variable Data/Time null String null string Også long string data Number 0 0

SQLHiA TRIGGER En trigger aktiverer en stored eller inline prosedyre som databasen automatisk eksekverer når en applikasjon forsøker å endre (INSERT / UPDATE / DELETE) data i en tabell. Forsøk på å endre data i en tabell aktiverer en eller flere triggere som er knyttet til denne kommandoen og denne tabellen. Tabell INSERT UPDATE DELETE Tr_Insert_01 Tr_Update_01 Tr_Delete_01 Tr_Delete_02

SQLHiA CREATE TRIGGER CREATE TRIGGERtrigger nameBEFORE AFTER UPDATEON table name OFtrigger column nameORDER sequence name DELETE INSERT REFERENCING OLDold value table name ASNEWnew values table name AS NEWnew value table name ASOLDold values table name AS (EXECUTEstored procedure name()) parameters INLINE()procedure tekst parameters FOR EACHSTATEMENT ROW

SQLHiA Trigger-plassering i DML Eksekverings-modell 1.Kontrollerantall bind data 2.Validiter verdier som er del av statementet (dvs ikke bound data) Nullverdi-, og datatype-sjekking 3.Utfør sikkerhetskontroll 4.Hvis trigger er definert, eksekver BEFORE STATEMENT trigger 5.Loop for hver rad som berøres av SQL-statementet: - Validiter verdier hvis bound in (Nullverdi-, datatype- og lengde-sjekking) - Eksekver BEFORE ROW trigger - Utfør kontroll for duplikate verdier - Utfør referanse integritet kontroll - Eksekver INSERT/UPDATE/DELETEDML - Eksekver AFTER ROW trigger 6.Eksekver AFTER STATEMENT trigger

SQLHiA TRIGGER-Before Insert CREATE TABLE t1 (c1 int); CREATE TRIGGER tg1 BEFORE INSERT ON t1 (EXECUTE INLINE (c1) PROCEDURE p1 STATIC Parameters Receive Number:n Actions Set n = 5 ) FOR EACH ROW; INSERT INTO t1 VALUES (0); Endrer kolonne-verdien i c1 fra 0 til 5

SQLHiA TRIGGER-Before Insert CREATE TABLE t1 (c1 int, c2 int, c3 int); CREATE TRIGGER tg1 BEFORE INSERT ON t1 (EXECUTE INLINE (c1,c2,c3) PROCEDURE p1 STATIC Parameters Number:n1 Number:n2 Receive Number:n3 Actions Set n3 = n1 + n2 ) FOR EACH ROW; INSERT INTO t1 (c1,c2) VALUES (5,7); Setter kolonne-verdien i c3 til = 12

SQLHiA TRIGGER-Before Insert CREATE TRIGGER tg1 BEFORE INSERT ON t1 (EXECUTE INLINE ( ) PROCEDURE p1 STATIC Local Variables Number:n2 Actions Set n2 = 7 Call SqlImmediate(‘INSERT INTO t2 VALUES ( :n2)’ ) FOR EACH ROW; INSERT INTO t1 (...) VALUES (...); Innsetter en rad i tabellen t2 før innsetting i tabellen t1. Hvis triggerinsettingen ble utført på t1 istedet for t2, så ville vi få en uendelig rekursjon (max 8 tillatt).

SQLHiA TRIGGER-Before Insert CREATE TABLE t1 (c1 int, c2 int, c3 int);CREATE TRIGGER tt1 BEFORE INSERT ON t1 CREATE TABLE t2 (d1 int, d2 int);(EXECUTE p1 (t1.c3,t1.c2)) FOR EACH ROW; STORE p1Actions PROCEDURE p1 STATICCall SqlConnect(hSql) ParametersSet sSelect = ‘SELECT t2.d2 INTO :nMin \ Number: n1 WHERE t2.d1 = :n1’ Number: n2 Call SqlPrepare(hSql, sSelect) Local Variables Call SqlExecute(hSql) Sql Handle:hSql Call SqlFetchNext(hSql, nFetch) Number:nFetch Call SqlDisconnect(hSql) Number:nMin If n2 < nMin Return Else Return 0; t2 d1d INSERT INTO t1 VALUES (1, 2000, 102)vil feile INSERT INTO t1 VALUES (1, 7000, 102) vil gå bra

SQLHiA TRIGGER-Before Update CREATE TRIGGER t1_updtBEFORE UPDATE OF c3 ON t1 REFERENCING OLD AS t1_old NEW AS t1_new (EXECUTE p1(t1_new.c3, t1_new.c2)) FOR EACH ROW; UPDATE t1 SET c3 = 103 WHERE c1 = 1vil feile

SQLHiA TRIGGER-Before DeleteEgenimplement. ref.int. CREATE TRIGGER t1_deleteBEFORE DELETE ON t2 (EXECUTE INLINE (t2.d1) PROCEDURE RI_Rule STATIC Parameters Number:nt2 Local Variables Boolean: bExists Actions Call SqlExists(‘SELECT c3 FROM t1 WHERE c3 = :nt2’, bExists) If bExists Return Else Return 0 ) FOR EACH ROW; DELETE FROM t2 WHERE d1 = 102vil feile

SQLHiA Trigger-Generelle restriksjoner -Triggere kan ikke benytte ikke-lagrede prosedyrer. STORE-kommandoen må benyttes. -Triggere kan ikke benytte dynamiske prosedyrer. -Aktuelle receive-parametre i EXECUTE kan kun være kolonner. funksjoner kan ikke inngå i parametre i prosedyrer som benyttes av triggere. -Det kan defineres max 16 triggere for hver kombinasjon av Table Event(INSERT, UPDATE, DELETE) Time(BEFORE, AFTER) Frequency(FOR EACH ROW, FOR EACH STATEMENT) Dette gir maksimalt 16 x 3 x 2 x 2 = 192 triggere for hver tabell.

SQLHiA Triggere og Prosedyrer Triggere kan kalle lagrede prosedyrer som igjen kan la SQLBase kalle andre triggere. Triggere kan nestes til og med 8 nivåer. Nesting utover 8 nivåer returnerer feil som igjen medfører rollback på den kommandoen som aktiverte triggeren.

SQLHiA Triggere og Prosedyrer Når triggere benyttes til å sette default- eller beregnede kolonneverdier ved INSERT/UPDATE, gjelder følgende: -Triggeren må være av typen BEFORE … ROW -UPDATE krever REFERENCING … NEW -Modifiseringskolonner må overføres som RECEIVE parametre.

SQLHiA Triggere og prosedyrer-Insert/Update/Delete Before/After -Insert / BeforeKan benyttes til integritets-kontroll før innsetting samt setting av default/beregnede kolonne-verdier. Parameter-kolonner (men ikke raden) er synlig for trigger. Ved default/beregnede kolonne-verdier må receive-parametre benyttes. -Insert / AfterKan benyttes til operasjoner på data som nettopp er innsatt. Både kolonne-parametre og ny rad er synlig for trigger. -Update / BeforeKan benyttes til integritets-kontroll før oppdatering samt setting av default/beregnede kolonne-verdier. Med REFERENCING … NEW vil de nye verdiene være synlig for trigger. Ved default/beregnede kolonne-verdier må receive-parametre benyttes. -Update / AfterKan benyttes til operasjoner på data som nettopp er endret. Med REFERENCING … OLD vil de gamle verdiene være synlig for trigger. -Delete / BeforeKan benyttes til operasjoner basert på snart-slettede data. Både parameter-kolonner og snart-slettede rader er synlig for trigger. -Delete / AfterKan benyttes til bekrefting/avslutning av data-sletting. Parameter-kolonner (med ikke slettede rader) er synlig for trigger.

SQLHiA Triggere og referanse-integritet Triggere er nyttige ved implementering av referanse-integritet ved erstatning / supplement av standard SQLBase referanse-integritet. Standard SQLBase referanse-integritet: - DELETERESTRICT SET NULL CASCADE Eksempel på supplement av referanse-integritet: - UPDATE SET NULL CASCADE...

SQLHiA CTD - Prosedyrer(1) PROCEDURE p Parameters Receive Number:nSNrID Receive String:sNavn Number:nPNr... Prosedyre for å finne SNrID og Navn for alle selgere med gitt PNr Call SqlRetrieve ( hSql, ’p’,’ :dfnSNrID, :dfsNavn, :dfnPNr’, ’ :dfnSNrID, :dfsNavn’ ) Call SqlExecute ( hSql ) Call SqlFetchNext ( hSql, nFetch ) Prosedyre-navn Samtlige prosedyre-parametre Receive prosedyre-parametre Statement i CTD (med datafelter) for å benytte prosedyren p

SQLHiA CTD - Prosedyrer(2) PROCEDURE p Parameters Receive Number:nSNrID Receive String:sNavn Number:nPNr... Prosedyre for å finne SNrID og Navn for alle selgere med gitt PNr Call SqlRetrieve ( hSql, ’p’,’ :dfnSNrID, :dfsNavn, :dfnPNr’, ’’ ) Call SalListPopulate ( hWndItem, hSql, ’’ ) Prosedyre-navn Samtlige prosedyre-parametre Receive prosedyre-parametre settes blank Statement i CTD (med combobokser) for å benytte prosedyren p

SQLHiA CTD - Prosedyrer(3) PROCEDURE p Parameters Receive Number:nSNrID Receive String:sNavn Number:nPNr... Prosedyre for å finne SNrID og Navn for alle selgere med gitt PNr Call SqlRetrieve ( hSql, ’p’,’ :dfnSNrID, :dfsNavn, :dfnPNr’, ’ :dfnSNrID, :dfsNavn’ ) Call SalTblPopulate ( tblSelger, hSql,’’,TBL_FillNormal ) Prosedyre-navn Samtlige prosedyre-parametre Receive prosedyre-parametre Statement i CTD (med TableWindow) for å benytte prosedyren p

SQLHiA End