Upload
dijana30
View
212
Download
0
Embed Size (px)
Citation preview
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
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
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.
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
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)
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
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
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
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