9
1 POGLEDI (VI EW) CREATE VIEW CrveniProizvodi(P_NO, P_IME, BOJA, TEZINA, GRAD) AS SELECT P_NO, P_IME, BOJA, TEZINA, GRAD FROM PROIZVOD WHERE BOJA='Crvena' Dalje se sa CrveniP roizvodi može raditi skoro sve kao sa pravom tabelom SELECT * FROM CRVENIPROIZVODI POGLEDI Promjene u pogledu se odražava ju na podatke iz kojih je pogled nastao (kad je to mogue)! UPDATE CRVENIPROIZVODI SET TEZINA=10 WHERE P_NO='P1' Mijenja i osnov nu tabe lu! INFORMACIJA O POGLEDIMA Informacije o ra znim obj ekti ma u bazi se mog u dobiti pomou pogleda koji izvlae te informacije iz sistemskih tabela. • Vla sni k o dno sno shema kojoj pripadaju ti pogledi  je INFORMATION_SCHEMA SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS Bri sanje p ogl eda DROP VIEW CrveniProzivodi DEFAUL T obj eka t Slino DEFAULT ogranienju na koloni Kori sno kada s e isti de fault koris ti na dost a mjes ta, u raznim tabelama. Kre ira se sa CREA TE DEFAULT re enicom SQL-a i povezuje sa kolonom izvršavanjem sp_bindefault procedure CREATE DE FAULT nula AS 0 GO CREATE TABLE PROBA(POLJE INT) GO sp_bindefault nula, 'proba.polje' Raskidanje vez e sa kol onom sp_unbindefault 'proba.polje' • Bri sanj e DEF AUL T objek ta (tek nakon što se raskine veza sa svim kolonama) DROP DEFAULT nula DEFAULT objekat DEFAUL T obj eka t Interaktivno (Enterprise Manager) Databa se – Defaul ts – New Default Dat aba se – Def aul ts – Proper ties

Baze 05- Razno

Embed Size (px)

Citation preview

Page 1: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 1/9

POGLEDI (VIEW)

– CREATE VIEW CrveniProizvodi(P_NO, P_IME,

BOJA, TEZINA, GRAD)

AS

SELECT P_NO, P_IME, BOJA, TEZINA, GRADFROM PROIZVOD

WHERE BOJA='Crvena'

Dalje se sa CrveniProizvodi može raditi skoro svekao sa pravom tabelomSELECT * FROM CRVENIPROIZVODI

POGLEDI

Promjene u pogledu se odražavaju napodatke iz kojih je pogled nastao (kad je tomogue)!

UPDATE CRVENIPROIZVODI

SET TEZINA=10

WHERE P_NO='P1'

Mijenja i osnovnu tabelu!

INFORMACIJA O

POGLEDIMA• Informacije o raznim objektima u bazi se mogu

dobiti pomou pogleda koji izvlae te informacijeiz sistemskih tabela.

• Vlasnik odnosno shema kojoj pripadaju ti pogledi je INFORMATION_SCHEMA

SELECT TABLE_NAME FROM

INFORMATION_SCHEMA.VIEWS

• Brisanje pogleda

DROP VIEW CrveniProzivodi

DEFAULT objekat

• Slino DEFAULT ogranienju na koloni

• Korisno kada se isti default koristi na dosta mjesta, uraznim tabelama.

• Kreira se sa CREATE DEFAULT reenicom SQL-ai povezuje sa kolonom izvršavanjem sp_bindefaultprocedure

CREATE DEFAULT nula AS 0

GO

CREATE TABLE PROBA(POLJE INT)

GOsp_bindefault nula, 'proba.polje'

• Raskidanje veze sa kolonom

sp_unbindefault 'proba.polje'

• Brisanje DEFAULT objekta (tek nakon što

se raskine veza sa svim kolonama)

DROP DEFAULT nula

DEFAULT objekatDEFAULT objekatInteraktivno (Enterprise Manager)

Database – Defaults – New Default

Database – Defaults – Properties

Page 2: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 2/9

DEFAULT objekatInteraktivno (Enterprise Manager)

Pravila (RULES)

• Slino kao CHECK CONSTRAINT nakoloni

• Korisno kada se isto ogranienje koristi na

dosta mjesta, u raznim tabelama.

• Kreira se sa CREATE RULE reenicom

SQL-a i povezuje sa kolonom izvršavanjem

sp_bindrule procedure

CREATE RULE

CREATE RULE id_chk AS @id BETWEEN 0 and 10000

CREATE RULE range_rule AS

@range >= $1000 AND @range < $20000

CREATE RULE list_rule AS @list IN ('1389', '0736', '0877')

CREATE RULE pattern_rule AS @value LIKE '_ _-%[0-9]'

Primjer CREATE RULE

CREATE TABLE klijent (

klijent_id int PRIMARY KEY,

ime char(50)

)

GO

CREATE RULE provjeraid AS @id BETWEEN 0 and 10000

GO

sp_bindrule provjeraid, ' klijent.klijent_id'

Raskidanje i brisanje pravila

• Raskidanje veze sa kolonom

sp_unbindrule 'klijent.klijent_id'

• Brisanje RULE objekta (tek nakon što se

raskine veza sa svim kolonama)

DROP RULE provjeraid

Pravila, interaktivnoDatabase –Rules– New Rule

Database – Rules – Properties

Page 3: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 3/9

USER DEFINED DATA TYPE

(UDT)• Tipovi podataka definisani korisnikom

• Zasnovani na postojecim tipovima

• Dobro kada se koriste u više tabela

• Kreira se procedurom sp_addtype

• EXEC sp_addtype telefon, 'varchar(24)', 'NOT NULL'

• GO

• CREATE TABLE TELEFONI(

• BROJ_TEL telefon PRIMARY KEY)

Brisanje UDT

•Brisanje UDT (tek nakon što seviše nije tip nijedne kolone)

EXEC sp_droptype 'telefon'

UDT, interaktivno

Database –User Defined Data Types

- New User Defined Data Type

- Properties

UDT, interaktivno

TRANSAKCIJE

• Transakcija (transaction) je niz operacija kojipredstavlja jedistvenu logiku cjelinu.

• Da bi logika cjelina bila transakcija ona moraimati 4 svojstva:

Atomicity, Consistency

Isolation, Durability

• Tzv. ACID svojstva

ACID svojstva

• Atominost – ili se sve modifikacije podataka izvrše, iliništa.

• Konzistentnost – na kraju transakcije baza mora biti u

konzistentnom stanju – podaci, kljuevi, indeksi.

• Izolacija – transakcija ne treba da vidi modifikacije koje

izvode konkuretne transakcije, sve dok se one ne završe.(serijabilnost – na kraju izgleda kao da su one izvršena jedna za drugom).

• Trajnost – kad se transakcija završi, izmjene koje jeizvršila su trajne, ak i ako doe do kvara sistema.

Page 4: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 4/9

Eksplicitne transakcije

• Sistem unutar sebe stalno koristi (implicitne)

transakcije

• Korisnike eksplicitne transkacije– BEGIN TRANSACTION

– COMMIT TRANSACTION

– U sluaju da transkacija ne može nastaviti saizvršavanjem

ROLLBACK TRANSACTION

BEGIN TRANSACTION

COMMIT TRANSACTION

BEGIN TRANSACTION

INSERT INTO SNABDJEVAC(SNO) VALUES ('S8')

INSERT INTO SNABDJEVAC(SNO) VALUES (NULL)

-- GRESKA, SVE SE PONISTAVA

-- (DVIJE CRTE SU KOMENTAR)

COMMIT TRANSACTION

Nivoi izolacije transakcije

• READ UNCOMMITTED

• READ COMMITTED (podrazumjevano)

• REPEATABLE READ

• SERIALIZABLE

• Vea nivo smanjuje konkurentnost!

• Postavlja se da

SET TRANSACTION ISOLATION LEVEL

Sistemske promjenljive

• Poinju sa @@

• @@ERROR – broj zadnje greške

• @@ROWCOUNT – broj torki pogoen zadnjimupitom

• @@IDENTITY – zadnja unijeta identityvrijednost

• Mogu se koristiti u upitima, procedurama ifunkcijama.

SELECT @@ERROR

STORED PROCEDURE

• Uskladištene procedure pisane na Transact-

SQL-u (T-SQL)

• T-SQL sadrži SQL i programski jezik slianPascal-u

• Mogue je deklarisati promjenljive,

izvršavati razne naredbe, npr. IF, WHILE,

GOTO, zajedno sa iskazima SQL-a

CREATE PROCEDURE

CREATE PROCEDURE info_snabdjevaci

AS

SELECT * FROM SNABDJEVAC

- izvršite je sa

EXEC info_snabdjevaci

Page 5: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 5/9

DROP PROCEDURE

• Procedura se briše sa DROP PROCEDURE

Reenicom

DROP PROCEDURE info_snabdjevaci

Može i ovakoIF EXISTS (SELECT name FROM sysobjects

WHERE name = 'info_snabdjevaci' AND type = 'P')

DROP PROCEDURE info_snabdjevac

Ulazni parametri

CREATE PROCEDURE info_snabdjevac

@IME_GRADA VARCHAR(30)

AS

SELECT * FROM SNABDJEVAC

WHERE GRAD=@IME_GRADA

- izvršite je sa

EXEC info_snabdjevac 'Podgorica'

Izmjena procedure, default

vrijednosti parametarakod procedure se mijenja sa ALTER PROCEDURE

ALTER PROCEDURE info_snabdjevac

@IME_GRADA VARCHAR(30)= 'Podgorica'

AS

SELECT * FROM SNABDJEVAC

WHERE GRAD=@IME_GRADA

- izvršite je bez parametara, sa

EXEC info_snabdjevac

Izlazni parametri

CREATE PROCEDURE br_snabdjevaca

@IME_GRADA VARCHAR(30),

@UKUPNO INTEGER OUTPUT

AS

SET @UKUPNO=(SELECT COUNT(*)

FROM SNABDJEVAC

WHERE GRAD=@IME_GRADA)

Pozivanje procedure sa izlaznim

parametrima

DECLARE @REZULTAT INT

EXEC br_snabdjevaca 'Podgorica',

@REZULTAT OUTPUT

SELECT @REZULTAT

Lokalne promjenljive

CREATE PROCEDURE dodaj_snabdjevaca

@SIFRA VARCHAR(30),

@IME VARCHAR(30)

AS

DECLARE @GRAD VARCHAR(30)

DECLARE @STATUS INT

SET @GRAD='Podgorica'

SET @STATUS= LEN(@GRAD)

INSERT INTO SNABDJEVAC(S_NO, S_IME, STATUS, GRAD)

VALUES(@SIFRA, @IME, @STATUS, @GRAD)

Page 6: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 6/9

IF…ELSE naredba,

BEGIN – END, PRINTCREATE PROCEDURE vece_isporuke

@SIFRA VARCHAR(30)

AS

IF (SELECT MAX(KOL) FROM ISPORUKA WHERE S_NO =@SIFRA) > 400

BEGIN

PRINT 'Ovo su isporuke snabdjevaca ' + @SIFRA

PRINT ' '

SELECT P_NO, F_NO, KOL

FROM ISPORUKA

WHERE S_NO = @SIFRA

END

ELSE

PRINT 'Ovaj snabdjevac je isporucio male kolicine!'

WHILE

CREATE PROCEDURE POVECAJ_STATUSE

ASDECLARE @BROJAC INT

SET @BROJAC=0

WHILE @BROJAC<10

BEGIN

SET @BROJAC=@BROJAC+1

UPDATE SNABDJEVAC

SET STATUS=STATUS+ 1

IF (SELECT MIN(STATUS) FROM SNABDJEVAC) > 13

BREAK

ELSE

CONTINUE

END

SELECT * FROM SNABDJEVAC

PRINT 'Kraj'

@@ERROR, RETURN

CREATE PROCEDURE dodaj_snabdjevaca

@SIFRA VARCHAR(30),

@IME VARCHAR(30)

AS

INSERT INTO SNABDJEVAC(S_NO, S_IME)

VALUES(@SIFRA, @IME)

IF @@ERROR <> 0

BEGIN

PRINT 'Greska!'

RETURN(99)

END

Kursor CURSOR

• CURSOR je objekat koji omoguuje da

aplikacije pristupaju podacima red po red, a

ne kroz tabele, odnosno skupove

vrijednosti.

• Kursor se deklariše sa

DECLARE ime_kursora CURSOR [OPCIJE]

AS select_upit [FOR UPDATE]

Kursori

• DECLARE snab_kursor CURSOR

FOR SELECT * FROM snabdjevac

• Opcije

– LOCAL , GLOBAL

– FORWARD_ONLY , SCROLL

– STATIC, KEYSET, DYNAMIC, FAST_FORWARD

– READ_ONLY, SCROLL_LOCKS, OPTIMISTIC

– TYPE_WARNING

– FOR UPDATE

Kursori

Kursor se otvara sa

OPEN ime_kursora

Kursor se zatvara saCLOSE ime_kursora

Kursor se uništava sa

DEALLOCATE ime_kursora

Page 7: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 7/9

FETCH

• FETCH naredba služi za dobijanje reda izkursora. Red ide na izlaz ili u promjenljive.

• FETCH [opcija] FROM ime_kursora• Opcije

– NEXT

– PRIOR

– FIRST

– LAST

– ABSOLUTE broj

– RELATIVE broj

Primjer rada sa kursorom

DECLARE snab_kursor CURSOR LOCAL SCROLL READ_ONLY

FOR SELECT S_NO, S_IME FROM snabdjevac

OPEN snab_kursor

FETCH NEXT FROM snab_kursor

FETCH RELATIVE 3 FROM snab_kursor

DECLARE @SIFRA VARCHAR(30)

DECLARE @IME VARCHAR(30)

FETCH NEXT FROM snab_kursorINTO @SIFRA, @IME

PRINT @SIFRA + ' ' + @IME

CLOSE snab_kursor

DEALLOCATE snab_kursor

UPDATE, DELETE

na kursoruNa kuroru koji nije READ_ONLY mogu s

izbrisati ili izmijeniti tekuci red. Insert nije

mogu.

UPDATE SNABDJEVAC

SET GRAD='Niksic'

WHERE CURRENT OF snab_kursor

DELETE FROM SNABDJEVAC

WHERE CURRENT OF snab_kursor

@@FETCH_STATUS

• Promjenljiva @@FETCH_STATUS sadrži

informaciju o (ne)uspjehu zadnje FETCH naredbe.

• @@FETCH_STATUS =0 ako je sve bilo u redu.

• Prije prve FETCH naredbe, vrijednost@@FETCH_STATUS je nedefinisana

• Vrijednost @@FETCH_STATUS je globalna , tj.na nju utiu FETCH naredbe na svim kursorima!

@@FETCH STATUS primjer

DECLARE snab_kursor CURSOR LOCAL

FOR SELECT S_NO, S_IME FROM SNABDJEVAC

DECLARE @SIFRA VARCHAR(30)

DECLARE @IME VARCHAR(30)OPEN snab_kursor

FETCH NEXT FROM snab_kursor INTO @SIFRA, @IME

WHILE @@FETCH_STATUS=0

BEGIN

PRINT @SIFRA + ' ' + @IME

FETCH NEXT FROM snab_kursor INTO @SIFRA, @IME

END

Trigger (okida)

• Okida je uskladištena procedura koja se

izvršava automatski, kada se desi neki

dogaaj u sistemu.• Postoje sledee vrste okidaa

– INSERT

– DELETE

– UPDATE

Page 8: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 8/9

Kreiranje okidaa

• Okida

i prepoznajukonceptualne

tabeledeleted

iinserted. One sadrže one redove koji se brišu,odnosno unose.

CREATE TRIGGER unosSnab

ON SNABDJEVAC

FOR INSERT

AS

INSERT INTO ISPORUKA(S_NO, P_NO, F_NO, KOL)

SELECT S_NO, 'P1', 'F1',0 FROM INSERTED

Delete okida

CREATE TABLE SPIJUN(

BR INT IDENTITY(1,1) PRIMARY KEY,

OPERACIJA VARCHAR(200),

VRIJEME DATETIME,

KORISNIK VARCHAR(200),

)

CREATE TRIGGER brisiSnab

ON SNABDJEVAC

FOR DELETE

AS

INSERT INTO SPIJUN(OPERACIJA, VRIJEME, KORISNIK)

SELECT 'IZBRISAN SNABDJEVAC '+DELETED.S_NO,GETDATE(), CURRENT_USER

FROM DELETED

Okidai, RAISERROR i

ROLLBACKCREATE TRIGGER brisiFabriku

ON FABRIKA

FOR DELETE

AS

IF EXISTS(SELECT * FROM DELETED WHEREF_NO='F8')

BEGIN

RAISERROR('Ne moze se brisati fabrika F8!', 16,1)

ROLLBACK TRANSACTION

END

UPDATE okidai

• Koriste i INSERTED i DELETED tabele

• Koriste i reenice IF UPDATE()

CREATE TRIGGER provjeraGrada

ON PROIZVOD

FOR UPDATE

AS

IF UPDATE(GRAD)

BEGIN

RAISERROR('Ne moze se mijenjati grad!',16,1)

ROLLBACK TRANSACTIONEND

Update okidai

CREATE TRIGGER provjeraTezine

ON PROIZVOD

FOR UPDATE

ASINSERT INTO SPIJUN(OPERACIJA, VRIJEME, KORISNIK)

SELECT 'IZMJENA TEZINE PROIZVODA '+DELETED.P_NO

+ ' SA '+CONVERT(VARCHAR, DELETED.TEZINA)+ ' NA '+CONVERT(VARCHAR, INSERTED.TEZINA)

, GETDATE(), CURRENT_USER

FROM INSERTED INNER JOIN DELETED ONINSERTED.P_NO=DELETED.P_NO

Kombinovanje okidaa

• sve vrste okidaa se mogu kombinovati

• tada treba koristiti tabele koje svi vide, npr. i UPDATE iDELETE okida pune tabelu deleted.

CREATE TRIGGER provjeraStatusON SNABDJEVAC

FOR UPDATE, DELETE

AS

IF EXISTS(SELECT * FROM DELETED WHERE STATUS=30)

BEGIN

RAISERROR('Snabdjevaci sa statusom 30 se ne mogu mijenjatiniti brisati!',16,1)

ROLLBACK TRANSACTION

END

Page 9: Baze 05- Razno

8/17/2019 Baze 05- Razno

http://slidepdf.com/reader/full/baze-05-razno 9/9

Brisanje okidaa

• DROP TRIGGER provjeraTezine

USER DEFINED FUNCTIONS

• Funkcije koje definiše korisnik 

• Mogu se koristiti svuda gdje i sistemske funkcije• Kreiraju se naredbom

CREATE FUNCTION ime (spisak parametara)

RETURNS tip

AS

BEGIN

tijelo funkcije

RETURN izraz

END

USER DEFINED FUNCTIONS

CREATE FUNCTION MOJ_TRIM(@X VARCHAR(20))

RETURNS VARCHAR(20)

AS

BEGIN

DECLARE @POM VARCHAR(20)

SET @POM=(LTRIM(RTRIM(@X)))

RETURN @POM

END

USER DEFINED FUNCTIONS

Imjena funkcije sa

ALTER FUNCTION

• Funkcije se brišu sa

DROP FUNCTION ime