Beruflich Dokumente
Kultur Dokumente
BP
BEOGRAD 2003.
Rezultat Upit
OLTP OLAP
Klijentska Aplikacija
sl.1.2 Klijent-server sistem troslojne arhitekture Osnove RDBMS-a RDBMS je skraenica za Relational Database Management System (Sistem za upravljanje relacionim bazama podataka).RDBMS sistemi pruaju vie od samog skladitenja podataka. Za njih se moe rei da brinu o integritetu podataka tj. deo odgovornosti za integritet podataka u RDBMS sistemu se prebacuje na samu bazu podataka. Podaci u ovim istemima su namenjeni velikom broju korisnika. SQL server uva podatke u bazi podataka.Podaci u bazi su organizovani u logike komponente koje su vidljive korisniku, dok baza sama po sebi predstavljava nekoliko fajlova na disku. Jedna instanca SQL servera moe da opsluuje hiljade korisnika koji rade sa bazom u isto vreme. SQL server baza podataka je organizovana u nekoliko razliitih objekata koje korisnici vide kada se konektuju na bazu.Ti objekti su : tabele, tipovi podataka, pogledi, uskladitene procedure, funkcije, indeksi, ogranienja, pravila, trigeri. Svaka instanca SQL servera ima 4 sistemske baze podataka : master, tempdb, msdb, model i jednu ili vie korisnikih baza.
Glava 1-Uvod u Microsoft SQL server Sistemske baze podataka Svaki SQL Server bez obzira na verziju ili ugraene modifikacije ima bazu podataka master. Ova baza sadri poseban skup sistemskih tabela koje vode rauna o sistemu kao celini. Baza podataka model predstavlja obrazac po kome e se praviti nova baza podataka. Ako se obriu baze master ili model sistem nee raditi. Baza podataka msdb je baza u kojoj SQL Agent skladiti sistemske zadatke. Baza podataka tempdb predstavlja jednu od kljunih oblasti rada za SQL Server. Kad god se kreira sloeni upit, takav da SQL mora da kreira privremene tabele da bi reio problem- to se obavlja u bazi tempdb. I kada sami kreiramo privremenu tabelu ona se smeta u tempdb. Baza podataka pubs se prvenstveno koristi za vebanje i eksperimentisanje. Baza podataka Northwind se isto koristi za vebanje ali je sloenije od baze pubs. Sistemske baze podataka
master
model
tempdb
msdb
pubs
Northwind
User1
Korisnike baze sl.1.3. Baze podataka u SQL serveru Alati SQL-Servera Transact-SQL Struktuirani upitni jezik ( Structured Query Language, SQL) jeste jezik za zadavanje upita nad bazom podataka koji je razvijen u IBM u 70 tih godina.Dijalekt SQL koji se koristi u SQL serveru naziva se Transact-SQL i on predstavlja komponentu jezgra SQL servera.Iskazi jezika Transact-SQL mogu se npr. upotrebiti za stvaranje objekata kao to su npr. tabele koje se uvaju u bazi podataka.Iskazi ovog jezika koriste se dodavanje podataka, manipulaciju podacima i drugim objektima baze
Glava 1-Uvod u Microsoft SQL server Query Analyzer Query Analyzer je Windows verzija aplikacije za unos komandi jezika TransactSQL.Kreiranje i modifikovanje upita pomou ove aplikacije je mnogo konfornije i jednostavnije nego iz komandne linije DOS-a.Posle pokretanja aplikacije potrebno je prijaviti se na SQL server unoenjem korisnikog imena, lozinke i servera sa kojim elimo da radimo. SQL Client Network i SQL Server NetworkUtility Definie biblioteke Net-Library i DB-Library koje se koriste za komunikaciju izmeu klijenata i servera.Da bi veza bila uspostavljena server mora da oslukuje protokol kojim klijent pokuava da komunicira U SQL serveru je mogue da klijent zapone komunikaciju sa jednim protokolom a onda pokuava sa nekim drugim ako prethodni ne radi. SQL Servers Books Online Ova komponenta sadri dokumentaciju o SQL u. SQL Service Manager Ova aplikacija pokree ili zaustavlja trajno ili privremeno procese SQL servera.SQL server se mora pokrenuti da bismo mogli obavljati bilo kakve operacije sa bazama podataka. U zavisnosti od opcija koje se izaberu pri instalaciji imaemo dva do pet SQL serverovih servisa: SQL Server Service: to je glavni servis koji ini okosnicu SQL servera. On skladiti i vraa podatke. SQL Server Agent: predstavlja planer zadatak SQL Servera. Ovaj servis eka kraj radnog vremena i onda pokree zatite i radi sve to smo podesili da SQL Server radi automatski. MS DTC ( Distributed Transaction Coordinator) Full-Text Search: mehanizam za temeljno pretraivanje teksta OLAP Services: Ovo je servis koji pomae analitikim servisima SQL servera SQL Enterprise Manager(EM) Ovo je aplikacija koja se koristi za gotove sve administrativne poslove sa lokalnim ili udaljenim serverima.Moe se koristiti i za otvaranje i brisanje korisnikih naloga za prijavljivanje na server, pokretanje, zaustavljanje i konfiguraciju servera, prikazivanje statistike servera, pravljenje rezervnih kopija i restauraciju baza podataka, EM podrava crtanje dijagrama relacija izmeu entiteta (Entity Relationship diagramming). Pomou EM se moe: Praviti, ureivati i brisati baza podataka kao i objekti baze podataka Praviti, ureivati i brisati DTS (Data Transformation Services) pakete Upravljati zakazanim poslovima kao to su pravljenje rezervnih kopija i izvravanje DTS paketa Prikazati trenutnu aktivnost: ko je prijavljen, koji su objekti zakljuani i sa kog klijenta su pokrenuti Upravljati bezbednou itd. 4
Glava 1-Uvod u Microsoft SQL server Servisi za transformaciju podataka ( DTS) DTS omoguava da uzmemo podatke iz bilo kog izvora podataka koji ima OLE DB posrednika. Dok se podaci prenose na njih moemo primeniti ono to se naziva transformacijom. Transformacije menjaju podatke prema nekom logikom pravilu. Npr. uzimamo podatke iz polja koje dozvoljava NULL vrednosti i te podatke premetamo u tabelu koja ta polja ne dozvoljava.Sa DTS-om moemo automatski promeniti NULL vrednost u neku drugu vrednost. Distribuirani koordinator transakcija(DTC) Transakcija je grupa elemenata na koju elimo da primenimo princip sve ili nita - ili e svi imati uspeha ili nee niko.DTC ini da se grupa iskaza ili realizuje u celini ili se vraa tako da se ini da se nikada nije ni dogodila.Primer : ako elimo da prebacimo 100 $ sa nekog rauna u banci A na neki raun u banci B tada neemo eleti da skinemo tih 100$ sa rauna u banci a ako nismo sigurni da je to deponovano na raunu u banci B. DTC omoguuje da se to odvija ba tako.
SQL Server Profiler SQL Server Profiler je alatka za praenje rada koja radi u realnom vremenu. Profiler moe u zavisnosti od onoga kako se konfigurie ono to se prati da prui kompletnu sintaksu svakog iskaza koji se izvrava na serveru.Profiler ima niz filtara koji omoguuju da definiemo ono to emo pratiti. Klijentski i serverski pomoni programi SQL server obezbeuje nekoliko tzv. Net-Libraries (mrenih biblioteka). To su biblioteke dinamikih veza (DLL-a) koje SQL server koristi da bi komunicirao u skladu sa odreenim protokolima u mrei. Mrene biblioteke slue kao neka vrsta izolatora izmeu klijentske aplikacije i mrenog protokola. SQL server sadri sledee mrene biblioteke : Named pipes TCP/IP Multiprotokol NWLink IPX/SPX Apple Talk Banzan VINES Shared Memory VIA Ista mrena biblioteka mora biti dostupna i na klijentskom i na serverskom raunaru kako bi oni mogli meusobno da komuniciraju preko mrenih protokola. Ako se izabere klijentska mrena biblioteka koju server ne podrava veza nee biti uspostavljena.Bez obzira na nain pristupa podacima uvek je upravljaki program( DB-Lib, ODBC ili OLE DB) taj koji komunicira sa mrenom bibliotekom.Sam proces se odvija na sledei nain :
Glava 1-Uvod u Microsoft SQL server 1. klijentska aplikacija komunicira sa upravljakim programom 2. upravljaki program poziva mrenu biblioteki klijenta 3. mrena biblioteka poziva odgovarajui mreni protokol i prenosi podatke do mrene biblioteke servera 4. mrena biblioteka servera onda prosleuje zahteve klijenta do SQL servera. Named Pipes Named Pipes je za instalaciju NT/2000 servera obavezna opcija. Ovaj protokol nije podran za instalaciju servera pod Win 9x . Protokoli Named Pipes su korisni kada TCP/IP nije dostupan ili kada nema DNS servera da obezbedi imena servera pod TCP/IPom. Named Pipes se javlja u 2 oblika Local Pipes i Network Pipes. Lokal Pipes se koristi kada se klijent koji koristi protokol Pipes pokrene na istom ureaju na kome se nalazi server.Network Pipes se koristi sa protokolom Named Papes u LAN-u. Razreava lokaciju servera na osnovu njegovog imena. TCP/IP TCP/IP je postao standardni protokol i ovo je mrena biblioteka koja se podrazumeva kod instalacije SQL servera. TCP/IP ima prednosti kao to su mogunost rada na svakom tipu servera i ima bolje performanse od protokola Named Papes kada su klijent i server na razliitim raunarima.TCP/IP je jedina opcija ako elimo da uspostavimo vezu sa naim serverom preko interneta. Multiprotokol Multiprotokol upravlja procesom kojim se odreuje koji protokol treba izabrati za odreeni server.Multiprotokol je pogodan u dva sluaja : 1. Kada imamo vie servera koji nemaju konzistentnu podrku mrene biblioteke kada multiprotokol odluuje koju e mrenu biblioteku koristiti 2. Kada preko interneta elimo da imamo direktan pristup SQL serveru. Protokol NWLink IPX/SPX se koristi u Novell-ovoj mrei, dok se AppleTalk koristi u mrei Macintosh-a.
Glava 2 - Instalacija i podeavanje klijentskog i serverskog softvera Izabere se opcija Windows Authentication Mode (moe se izabrati i integrisana bezbednost tj. SQL autentifikacija i Windows autentifikacija, i za tu opciju se navede password za administratora sistema- sa) Dalji postupak instalacije odvija se automatski
Posle zavrene instalacije potrebno je izvriti konfigurisanje SQL servera. U tu svrhu je potrebno pokrenuti Enterprize Manager , kliknuti desnim tasterom na ime servera i izabrati opciju Properties.U General kartici SQL Server Properties (configure) moe se podesiti da SQL Server startuje automatski kada se pokrene Operativni sistem. Takoe klikom na dugme Network Configuration mogu se podesiti mreni protokoli i mrene biblioteke.Postoji mogunost podeavanja memorije korienjem kartice Memory, podeavanje bezbednosti SQL servera korienjem kartice Security itd. Za podeavanje klijentskih parametara koristi se Client Network Utility .U kartici General aplikacije Client Network Utility se podeavaju klijentski protokoli.Sve mrene biblioteke klijenta su prikazane u kartici Network Libraries itd. Klijentska instalacija Da bi se instalirao klijentski softfer pod treom stavkom odabere se opcija Client Tools Only . Select Components dialog box se pojavljuje u kome se biraju komponente koje se ele instalirati.Difolt opcija je Management Tools, Client Connectivity, Books Online, and Development Tools . Ostali postupak instalacije je isti kao i za serversku instalaciju.
Primer1: USE Northwind CREATE TABLE Importers ( CompanyID int NOT NULL, CompanyName varchar(40) NOT NULL, Contact varchar(40) NOT NULL ) Primer2 USE Northwind ALTER TABLE Importers ADD ContactTitle varchar(20) NULL Primer 3 : USE Northwind DROP TABLE Importers
Glava 3 - Korienje Transact SQL a na SQL server bazi podataka Data Control Language (DCL ) Jezik za kontrolu podataka se koristi da kontrolie dozvolu nad objektima baze podataka.Dozvola se kontrolie korienjem naredbi GRANT, REVOKE i DENY . Primer 1: USE Northwind GRANT SELECT -- Odobrava se izvrsavanje SELECT naredbe svima koji imaju -- public pravo pristupa tabeli Customers ON Customers TO PUBLIC Primer 2: USE Northwind REVOKE SELECT --Ponitava dozvolu koju je naredba GRANT dodelila ON Customers TO PUBLIC Primer 3: USE Northwind -- zabrana komande SELECT nad tabelom Customers DENY SELECT ON Customers TO PUBLIC Jezik za manipulaciju podacima (DML ) Jezik za manipulaciju podacima se koristi da se selektuju, ubace, auriraju podaci u objektima definisani sa jezikom za definisanje podataka.
10
Primer SELECT naredbe : USE Northwind SELECT CustomerID, CompanyName, ContactName FROM Customers WHERE (CustomerID = 'alfki' OR CustomerID = 'anatr') ORDER BY ContactName
Primer INSERT naredbe : USE Northwind INSERT INTO Territories VALUES (98101, 'Seattle', 2) Primer UPDATE naredbe : USE Northwind UPDATE Territories SET TerritoryDescription = 'Downtown Seattle' WHERE TerritoryID = 98101
Primer DELETE naredbe : USE Northwind DELETE FROM Territories WHERE TerritoryID = 98101
11
Transact-SQL sintaksni elementi Ime objekta u bazi podataka se naziva identifikator.Identifikator se onda koristi za obraanje objektu. Primer: CREATE TABLE TableX (KeyCol INT PRIMARY KEY, Description NVARCHAR(80)) Ovde se kreira tabela sa identifikatorom TableX , koja sadri celobrojno polje sa indentifikatorom KeyCol, i string polje do 80 karaktera sa identifikatorom Description.Ukoliko identifikatori imaju isti naziv kao neka rezervisana re ili u nazivu identifikatora postoji praznina onda se oni stavljaju izmeu zagrada []. Primer: SELECT * FROM [My Table] WHERE [Order] = 10 Lokalne promenljive se deklariu korienjem naredbe DECLARE koja ima sledeu sintaksu : DECLARE @localna_promenljiva tip_podatka Vie lokalnih promenljivih moe da se napravi pomou jedne naredbe DECLARE na sledei nain : DECLARE @var1 int, @var2 int Kada se lokalna promenljiva prvi put napravi ona ima vrednost NULL SET @myCharVariable = Hello World! Globalne promenljive imaju dupli znak @@ i korisnik ih ne moe napraviti. Primer : USE Northwind DECLARE @EmpIDVar INT SET @EmpIDVar = 3 SELECT * FROM Employees WHERE EmployeeID = @EmpIDVar + 1 Komentari komentar u jednoj liniji --komentar u vie linija /*komentar */
12
Glava 3 - Korienje Transact SQL a na SQL server bazi podataka Operatori U SQL serveru su definisani aritmetiki operatori (*, /, %, +, -), operatori poreenja (=,>,<,>=,<=,<>), logiki operatori (AND, OR, NOT), operator za povezivanje stringova (+).Prilikom korienja operatora potrebno je voditi rauna o prioritetu operatora koji je isti kao i u ostalim programskim jezicima. Elementi za kontrolu toka IF...ELSE naredba IF naredba se koristi za testiranje uslova. Ako je vrednost uslova koji se testira istinit izvrava se naredba ili blok naredbi koji slede posle IF naredbe, u protivnog se izvrava naredba ili blok naredbi koji slede ispod komande ELSE. Primer : DECLARE @MojString char(2) -- promenljivoj @MojString se dodeljuje sluajno generisani string SET @MojString = CHAR( FLOOR( 26* RAND())+ ASCII('A') ) --PRINT @MojString IF @MojString = 'C' PRINT 'Dobio si C' ELSE PRINT 'Nisi dobio C' Blok narednbi Predstavlja skup naredbi Transact-SQL-a koji poinje korienjem kljune rei BEGIN a zavrava se sa END. SQL server ih tretira kao jednu celinu. WHILE konstrukcija Naredba WHILE testira neki uslov i sve dok je on istinit izvrava se naredba ili blok naredbi koji slede ispod naredbe WHILE. Primer: USE MojaBaza CREATE TABLE [New Table] ( ColumnA INT, ColumnB CHAR(3), ColumnC CHAR(5) ) 13
-- deklaracija lokalne promenljive DECLARE @MojBrojac INT SET @MojBrojac = 0 WHILE (@MojBrojac <26) BEGIN INSERT INTO [New Table] VALUES( @MojBrojac+1, CHAR( @MojBrojac + ASCII('A')) , CHAR( @MojBrojac + ASCII('a') ) ) SET @MojBrojac = @MojBrojac + 1 END Naredba CASE Naredba CASE predstavlja naredbu viestruke selekcije. Njena sintaksa je : CASE izraz WHEN vrednost_1 THEN rezultat_1 WHEN vrednost_2 THEN rezultat_2 . . WHEN vrednost_N THEN rezultat_N Primer 1 : USE pubs SELECT title, price, 'Tip' = CASE type WHEN 'mod_cook' THEN 'Modern Cooking' WHEN 'trad_cook' THEN 'Traditional Cooking' WHEN 'psychology' THEN 'Psychology' WHEN 'business' THEN 'Business' ELSE 'Not yet decided' END FROM titles
14
Drugi oblik naredbe CASE je : CASE WHEN izraz_1 THEN rezultat_1 WHEN izraz_2 THEN rezultat_2 WHEN izraz_n THEN rezultat_n Primer: USE pubs SELECT title, price, 'Kategorizacija'=CASE WHEN price < 10.00 THEN 'Jeftin' WHEN price BETWEEN 10.00 AND 20.00 THEN 'Prosecna cena' WHEN price > 20.00 THEN 'Skup' ELSE 'Nepoznata cena' END FROM titles
15
Glava 4 - Dizajniranje SQL server baze podataka Poto objekat (tabela) ima konkretnog vlasnika svaki korisnik ove tabele mora da obezbedi vlasniki odreeno ime da bi SQL server mogao da razrei ime tabele.Ako korisnik sa imenom Marko koji je istovremeno vlasnik baze podataka kreira tabelu MojaTabela tada e ime te tabele biti dbo.MojaTabela . Pored toga poto je dbo uvek podrazumevani vlasnik svaki korisnik bi mogao tu tabelu da oznai kao dbo. Dizajniranje baze podataka podrazumeva identifikaciju sistemskih zahteva,identifikaciju sistemskih ciljeva, identifikaciju iznosa podataka kao i tipova podataka, identifikacija kako e se podaci koristiti, i identifikacija biznis pravila sistema.
Kreiranje baze Najjednostavniji nain da se baza kreira je korienje SQL Server Enterprise Manager-a i to u nekoliko koraka : 1. U Enterprise Manageru selektuje se opcija Databases 2. Pokrene se Wizard klikom na ikonicu u obliku tapia 3. Izabere se Create Database Wizard 4. Pojavljuje se prozor u kome se definie naziv baze i mesto gde e se uvati fajlovi 5. Potrebno je zatim definisati naziv i poetnu veliinu primarnog dejta fajla 6. Zatim se definie maksimalna veliina i inkrement porasta primarnog dejta fajla 7. Definie se ime i poetna veliina fajla transakcionog loga 8. Definie se maksimalna veliina i inkrement porasta fajla transakcionog loga Osobine ovako kreirane baze mogu se promeniti desnim klikom na ime baze u prozoru SQL Server Enterprise Manager-a i izabere se stavka properties.Baza se moe obrisati tako to se selektuje u prozoru Enterprize Managera i pritisne dugme delete. Jo jedan nain za kreiranje baze je korienjem naredbe CREATE DATABASE. CREATE DATABASE database_name [ON {[PRIMARY] (NAME = logical_name, FILENAME ='physical_name' [,SIZE = size] [,MAXSIZE = max_size | UNLIMITED] [,FILEGROWTH = growth_increment]) }[,...n]] [LOG ON {(NAME = logical _name, FILENAME = 'physical_name' [,SIZE=size | UNLIMITED] [,MAXSIZE = max_size | UNLIMITED] [,FILEGROWTH = growth_increment])} [,...n]] [FOR LOAD | FOR ATTACH] 17
ON se koristi udva skuaja i to prvo da bi se definisala lokacija datoteke u kojoj se skladite podaci i da bi se definisala ista informacija za skladitenje dnevnika (engl. log). Kljuna re PRIMARY oznaava da ono to sledi predstavlja primarnu datoteku u kojoj se skladite podaci NAME predstavlja logiko ime datoteke tj. ime koje SQL serveru slui za referenciranje te datoteke FILENAME fiziko ime datoteke operativnog sistema na disku , istog je oblika kao i ime baze samo ima ekstenziju mdf , dok e dnevnik imati isto ime ali e sadrati jo nastavak _log i ekstenyiju ldf. SIZE - veliina baze podataka izraena u MB MAXSIZE - SQL server ima mehanizam da alocira dodatni prostor na disku kada je to potrebno. MAXSIZE je maksimalna veliina do koje baza moe da ide. Ako korisnik pokua da unese podatke posle te veliine dobie poruku o greci FILEGROWTH definie inkrement porasta fajla baze podataka Primer :
CREATE DATABASE Accounting ON (NAME = 'Accounting', FILENAME='c:\ProgramFiles\MicrosoftSQLServer\mssql\data\AccountingData.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5) LOG ON (NAME = 'AccountingLog', FILENAME = 'c:\Program Files\Microsoft SQL Server\mssql\data\AccountingLog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB) GO
ALTER I DROP KOMANDE U Query Analyzer-u izvrimo najpre komandu EXEC sp_helpdb Accounting Sada elimo da bazu proirimo da bude veliine 100 MB : ALTER DATABASE Accounting MODIFY FILE ( NAME = Accounting', SIZE = 100 MB ) 18
Da bi se proverili rezultati potrebno je ponovo izvriti gornju komandu. Brisanje baze vri se komandom USE master ne moze se brisati baza koja se trenutno koristi DROP DATABASE Accounting
19
Glava 5 - Tabele
5.Tabele
Tabele su osnovne jedinice za uvanje podataka u relacionoj bazi podataka.Svaka kolona u tabeli ima odreena svojstva. Najvanije svojstvo je tip podataka kolone.Pored tipova podataka koje obezbeuje SQL server mogu se definisati i sopstveni tipovi podataka.Sistemski tipovi podataka u SQL serveru dati su u tabeli 1. Kreiranje tabele 1. Startujemo Enterprise Manager 2. Otvorimo bazu u kojoj elimo da kreiramo tabelu 3. Kliknemo na Tables a zatim na dugme u obliku zvevde New (ili desni klik na Tables pa New table...) 4. SQL server otvara table designer 5. Definiemo nazive polja tabele kao i tipove podataka Ubacivanje redova u tabelu U Enterprise Manager-u desnim tasterom kliknemo na naziv tabele i izaberemo opciju Open Table a zatim Return All Rows . Mogue je i izabrati opciju Return Top ime se bira broj vrsta tabele koji se eli prikazati.Ovako otvorena tabela se moe popunjavati novim zapisima, zapisi se mogu modifikovati ili brisati.Korienjem dugmia sa palate alatki moe se prikazati okno sa dijagramom , okno sa mreom i SQL okno.
20
Glava 5 - Tabele
CREATE TABLE Sintaksa Transact-SQL naredbe za kreiranje tabele je : CREATE TABLE [database.[owner.] table_name ( column_name datatype [identity|constraint|NULL|NOT NULL] [...] )
21
Glava 5 - Tabele Kada kolona postane kolona identiteta, SQL server toj koloni automatski dodeljuje broj svaki put kada se unese neki red tabele.Broj od koga SQL server poinje da broji naziva se poetna vrednost, a vrednost za koju se poetna vrednost uveava ili smanjuje naziva se inkrement. Podrazumevana vrednost za poetnu vrednost i inkrement je 1. Kolona identiteta mora biti numerika a u praksi se skoro uvek implementira sa celebrojnim tipom podataka. Korienje je prilino jednostavno : samo se ukljui kljuna re IDENTITY odmah iza tipa podatka. Oznaka NULL / NOTNULL govori da li kolona koja je u pitanju prihvata vrednost NULL ili ne Ogranienja za kolone se odnose na podatke koje se mogu unositi u kolonu. Primer : USE Accounting CREATE TABLE Customers ( CustomerNo int IDENTITY NOT NULL, CustomerName varchar(30) NOT NULL, Address1 varchar(30) NOT NULL, Address2 varchar(30) NOT NULL, City varchar(20) NOT NULL, State char(2) NOT NULL, Zip varchar(10) NOT NULL, Contact varchar(25) NOT NULL, Phone char(15) NOT NULL, FedIDNo varchar(9) NOT NULL, DateInSystem smalldatetime NOT NULL ) Da bi se proverilo da li je tabela zaista kreirana moe se izvriti sistemska uskladitena procedura sp_help: sp_help Customers
Izmene u tabeli i brisanje tabele Naredba ALTER TABLE bie objanjena na konkretnom primeru. Kreirajmo najpre tabelu Employees korienjem sledeeg SQL skripta u Query Analyzery:
22
Glava 5 - Tabele USE Accounting CREATE TABLE Employees ( EmployeeID int IDENTITY NOT NULL, FirstName varchar(25) NOT NULL, MiddleInitial char(1) NULL, LastName varchar(25) NOT NULL, Title varchar(25) NOT NULL, SSN varchar(11) NOT NULL, Salary money NOT NULL, PriorSalary money NOT NULL, LastRaise AS Salary - PriorSalary, HireDate smalldatetime NOT NULL, TerminationDate smalldatetime NULL, ManagerEmpID int NOT NULL, Department varchar(25) NOT NULL ) Izvravanjem narsedbe: EXEC sp_help Employees kao rezultat se dobijaju karakteristike ove tabele. Promenimo sada ovu tabelu korienjem sledee naredbe : ALTER TABLE Employees ADD PreviousEmployeer varchar(30) NULL Rezultat ove naredbe je dodavanje jo jedne kolone u tabelu Employees. To se moe proveriti ponovnim izvravanjem sistemsku uskladitene procedure Employees Brisanje tabele iz baze vri se pomou naredbe DROP TABLE : USE Accounting DROP TABLE Employees
Ogranienja Posmatrano na nivou kolone ili tabele ogranienje obezbeuje da podaci ispunjavaju odreena pravila vezana za integritet podataka.
23
Glava 5 - Tabele Ogranienje PRIMARY KEY Primarni kljuevi su jedinstveni identifikatori za svaki red. Maraju da sadrr jedinstvene vrednosti i zato ne mogu da imaju vrednost NULL. Tabela moe da ima maksimalno jedan primarni klju. Primarni klju obezbeuje jedinstvenost kolone koja je definisana kao primarni klju. Kreirajmo sada tabelu Customers uz ogranienje da kolona CustomerNo bude primarni klju (Logino je da svaki korisnik ima jedinstven broj). USE Accounting CREATE TABLE Customers ( CustomerNo int IDENTITY NOT NULL PRIMARY KEY, CustomerName varchar(30) NOT NULL, Address1 varchar(30) NOT NULL, Address2 varchar(30) NOT NULL, City varchar(20) NOT NULL, State char(2) NOT NULL, Zip varchar(10) NOT NULL, Contact varchar(25) NOT NULL, Phone char(15) NOT NULL, FedIDNo varchar(9) NOT NULL, DateInSystem smalldatetime NOT NULL ) Ako tabela Customers ve postoji u naoj bazi ali nije definisan primarni klju to je mogue naknadno uraditi korienjem sledee naredbe: USE Accounting ALTER TABLE Customers ADD CONSTRAINT PK_Customers PRIMARY KEY(CustomerNo ) Naravno da se ovo moe jednostavnije uraditi u Enterprise Manger-u desnim klikom na ime tabele pa izborom opcije Design Table, zatim selektujemo kolonu koju elimo da proglasimo za primarni klju i kljiknemo na dugme u obliku kljua. Ogranienje FOREIGN KEY Kada se tabeli doda spoljnji klju stvara se zavisnost izmeu tabele za koju se definie spoljni klju (tabela na koju se upuuje) i tabele na koju se odnosi spoljnji klju (tabela koja upuuje) Ilustracija stranog kljua je data sql skriptom :
24
Glava 5 - Tabele USE Accounting CREATE TABLE Orders ( OrderID int IDENTITY NOT NULL PRIMARY KEY, CustomerNo int NOT NULL FOREIGN KEY REFERENCES Customers(CustomerNo), OrderDate smalldatetime NOT NULL, EmployeeID int NOT NULL ) Treba obratiti panju da kolona a koju se upuuje mora imati primarni klju. Za razliku od primarnog kljua nismo ogranieni na jedan spoljnji klju po tabeli.Kreirajmo jo jedan spoljnji klju za tabelu Orders . Sada emo da referenciramo tabelu Employees tj njenu kolonu EmployeeID ALTER TABLE Orders ADD CONSTRAINT FK_EmployeeCreateOrder FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)
Employees EmployeID(PK)
Customers CustomerNo(PK)
25
Glava 5 - Tabele Ogranienje UNIQUE Ovo ogranienje zahteva jedinstvenu vrednost za celu kolonu. Za razliku od primarnog kljua ovo ogranienje ne spreava automatski vrednost NULL. Ipak ako se dozvoli vrednost NULL nju moemo uneti samo jedanput.U jednoj tabeli moemo imati vie ogranienja . Primer: USE Accounting CREATE TABLE Shippers ( ShipperID int IDENTITY NOT NULL PRIMARY KEY, ShipperName varchar(30) NOT NULL, Address varchar(30) NOT NULL, City varchar(25) NOT NULL, State char(2) NOT NULL, Zip varchar(10) NOT NULL, PhoneNo varchar(14) NOT NULL UNIQUE ) Pravljenje ogranienja UNIQUE za postojee tabele : ALTER TABLE Employees ADD CONSTRAINT AK_EmployeeSSN UNIQUE(PhoneNo ) Ogranienje CHECK Ovo ogranienje se ne mora odnositi samo na jednu kolonu . Moe se odnositi na vie kolona pa ak i celu tabelu. ALTER TABLE Customers ADD CONSTRAINT CN_CustomerDateInSystem CHECK (DateInSystem <= GETDATE()) Ovo ogranienje onemoguava da se unese datom u budunosti. Ako sada pokuamo da u tabelu ubacimo datum u budunosti dobijamo poruku o greci
26
Glava 5 - Tabele Primer kaskadnog auriranja i pokuaja da se unese datum vei od sistemskog datuma: INSERT INTO Customers -- Our Customer. -- Remember that CustomerNo is -- an Identity column VALUES ('Billy Bob''s Shoes', '123 Main St.', ' ', 'Vancouver', 'WA', '98685', 'Billy Bob', '(360) 555-1234', '931234567', '12-31-2049' ) Ogranienje DEFAULT Napraviemo jednostavniju verziju tabele Shippers koja sadri podrazumevanu vrednost. CREATE TABLE Shippers ( ShipperID int IDENTITY NOT NULL PRIMARY KEY, ShipperName varchar(30) NOT NULL, DateInSystem smalldatetime NOT NULL DEFAULT GETDATE () ) U ovu tabelu je sada samo potrebno unositi Shippername , dok se za polje DateInSystem automatski uzima sistemsko vreme ako mi nita ne unesemo. Ogranienje se moe dodati u postojeu tabelu : USE Accounting ALTER TABLE Customers ADD CONSTRAINT CN_CustomerDefaultDateInSystem DEFAULT GETDATE() FOR DateInSystem .
27
Glava 6 - Indeksi
6.Indeksi
U relacionoj bazi podataka indeks je poseban objekat koji bazi podataka dozvoljava brz pristup redovima u tabeli na osnovu vrednosti jedne ili vie kolona.Microsoft SQL server ima dve grupe indeksa : grupisane i negrupisane .Grupisan indeks odreuje redosled kojim su redovi neke tabele fiziki sauvani.Negrupisan indeks je sa druge strane zaseban objekat unutar baze podataka koji ukazuje na posebne redove unutar tabele ali ne ukazuje kako su redovi sauvani. Indeks koji referencira jednu kolonu naziva se jednostavan indeks dok indeks koji referencira vie kolona naziva se kompozitni ili sloeni indeks.Pored indeksa koji definiemo sql e automatski napraviti grupisani indeks koji se zove indeks primarnog kljua.Primarni klju je kolona koja se koristi za jedinstveno identifikovanje svakog reda.Grupisani indeks je jedinstven za tabelu a tabela koja sadri grupisani indeks naziva se grupisana tabela.Grupisani indeksi su bri od negrupisanih indeksa. negrupisani indeksi se postavljaju na kolone koje imaju veliki stepen selektivnosti tj. imaemo 95 % ili vie razliitih redova koji imaju razliite vrednosti u toj koloni. Treba napomenuti da indeksi zauzimaju prostor.Indeks se koristi samo ako se prva kolona indeksa (indeks moe biti sastavljen od vie kolona) pojavljuje u upitu.esto se primarni klju pravi sa grupisanim indeksom. Opseg Opseg (engl. extent) je osnovna jedinica za skladitenje i alociranje prostora za tabele i indekse. Sastoji se od 8 susednih strana podataka pri emu je veliina strane 64 KB. Kad se unese prvi red u tabelu SQL server alocira memoriju za 8 strana tj. ceo opseg. Kada je opseg pun unoenje sledeeg reda nee zauzeti opseg koji odgovara veliini tog loga ve prostor koji odgovara veliini itavog opsega. Time SQL server tedi vreme koje bi mu bilo potrebno da za svaki novi slog alocira prostor. Strana Strana je jedinica za alokaciju unutar pojedinog opsega.Stranu treba shvatiti kao neku vrstu kontejnera i za tabele i za indekse redova podataka.Stranu pored redova ine : zaglavlje strane, sami podaci u redu i ofset redova.
Glava 6 - Indeksi
Postoje strane podataka, strane indeksa, BLOB strane gde se smetaju veliki binarni objekti (slike kao i tipovi podataka text i ntext), strane globalnih alokacionih mapa gde se nalaze informacije koje nam ukazuju gde je alociran prostor koji nam je na raspolaganju. Kada se strana popuni vri se tzv. razdvajanje strana tj. ne vri se samo alociranje nove strane ve polovina podataka prelazi na susednu tranu.Jedino ako sekoristi grupisani indeks tada se ne vri razdvajanje strana. Pristupanje podacima u SQL serveru Postoji dva naina na koje SQL Server moe pronai podatke koje zahtevamo: pregledanjem tabela korienjem indeksa Pregledanje tabela je prilino jasan proces.SQL server poinje od fizikog poetka tabele tako to posmatra svaki red u tabeli. Kada pronae redove koji odgovaraju kriterijumu naeg upita ukljuuje ih u skup rezultata. U nekim sluajevima pregledi tabeli mogu biti najbri metod pristupa. To je sluaj kada traimo podatke iz malih tabela. Tana veliina pri kojoj imamo taj sluaj zavisi i od irine tabele i od vrste upita. Ukoliko se koriste indeksi tada se pri generisanju upita vri proces optimizacije upita pri emu se posmatraju svi indeksi koji su na raspolaganju i bira se najbolji. Kada se odabere indeks SQL server prolazi kroz strukturu stabla do mesta gde su podaci koji odgovaraju kriterijumu upita. Kreiranje indeksa 1. 2. 3. 4. Pokrenemo vizard iz Enterprise Managera Izaberemo Create Index Wizard Upiemo naziv baze i tabele za koju kreiramo indekse Kada se tabela prikae izaberemo imena kolona koja elimo da ukljuimo u indeks 5. Prihvatimo podrazumevane vrednosti i indeks je kreiran Indeks primarnog kljua 1. 2. 3. 4. Otvorimo Table designer Izaberemo kolonu koju elimo da proglasimo za primarni indeks kliknemo na ikonicu u obliku kljua Primarni indeks je kreiran
29
Glava 6 - Indeksi Pravljenje prostog indeksa 1. Posle otvaranja dizajnera tabele pritisnimo na dugme Manage Indexes/Keys 2. Izaberemo opciju New 3. Izaberemo kolonu koja e da predstavlja prost indeks 4. Izaberemo opcije UNIQUE 5. gotovo Mogue je indekse naknadno menjati , promeniti im naziv, parametre ili ih obrisati.
30
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka
7.Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka
Relacije Logiki postoje tri vrste relacija : jedan-prema-jedan , u kome je svaki red iz jedne tabele povezan a jednim ili nula redova iz druge tabele, jedan-prema-vie u kome je svaki red iz jedne tabele povezan sa nula, jednim ili vie redova iz druge tabele, vieprema-vie u kome je svaki red iz jedne tabele povezan sa nula, jednim ili vie redova iz druge tabele i svaki red iz druge tabele povezan sa nula, jednim ili vie redova iz druge tabele. Pravljenje relacija 1. 2. 3. 4. Otvorimo Table Designer za tabelu koja sadri strani klju Pritisnemo dugme Relationship na paleti alatki Table Designer Izabere se opcija New da bi se kreirala nova relacija Izabere se na levoj strani tabela iji primarni klju predstavlja strani klju gornje tabele, a na desnoj strani gornja tabela pod opcijom Foreign key table 5. Izaberu se odgovarajua polja za obe tabele 6. Close Dijagrami baza podataka 1. 2. 3. 4. Desni klik na opciju Diagrams Izabere se Create Database Diagram Posle startovanja Wizarda odaberu se tabele koje e biti prikazane Finish
Primer:
Porudzbine PorudzbinaID(PK)
KorisnikID BrojLokacije
FK
31
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka USE Accounting CREATE TABLE Korisnik ( KorisnikID int NOT NULL, BrojLokacije smallint NULL, ImeKorisnika varchar(50) NOT NULL, CONSTRAINT Korisnik_UNQ UNIQUE BrojLokacije) )
CLUSTERED
(KorisnikID,
CREATE TABLE Porudzbine ( PorudzbinaID int NOT NULL IDENTITY CONSTRAINT Porudzbine_PK PRIMARY KEY NONCLUSTERED, BrojKorisnika int NOT NULL, LokacijaKorisnika smallint NULL, CONSTRAINT FK_Porudzbine_Korisnik FOREIGN KEY (BrojKorisnika, LokacijaKorisnika) REFERENCES Korisnik (KorisnikID, BrojLokacije ) ) Pristupanje podacima korienjem SELECT naredbe Sintaksa naredbe SELECT je : SELECT [TOP n [PERCENT]] column list FROM source_list [WHERE search_condition] [ORDER BY expression] Biranje svih kolona SELECT * FROM table_name Isprobati ovo u Query Analyzer u i pokazati da je to identino sa otvaranjem u Enterprise Manager-u izborom opcije Return All Rows
Pr. Biranje jedne kolone USE Accounting SELECT ImeKorisnika FROM Korisnik 32
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka Pravljenje pseudonima USE Accounting SELECT Imekorisnika AS Imena FROM Korisnik USE Northwind SELECT ProductID, ProductName, UnitPrice FROM Products WHERE UnitPrice > 40 ORDER BY UnitPrice ASC USE pubs SELECT p.pub_id, p.pub_name FROM publishers AS p
- upotreba pseudonima
INTO klauza USE Northwind SELECT FirstName, LastName INTO EmployeeNames FROM Employees
Pravljenje spojeva Unutranji spoj USE Pubs SELECT t.Title, p.Pub_name FROM Publishers AS p INNER JOIN Titles AS t ON p.Pub_id = t.Pub_id ORDER BY Title ASC Spoljanj spojevi Levi spoljanji spoj
33
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a LEFT OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC Vraa sve redove iz leve tabele i samo one redove iz desne tabele za koje je uslov spajanja taan.Postoji jo i RIGHT OUTER JOIN i FULL OUTER JOIN.
Naredba INSERT Sintaksa ove naredbe je : INSERT [INTO] table_or_view [(column_list)] VALUES (values_list) U Enterprise Manageru desnim dugmetom kliknemo na tabelu, izaberemo OpenTable i izaberemo Query .Tade e query dizajner da otvori sva etiri okna. 1. Izaberemo dugme Change Query Type 2. Izaberemo Insert ino 3. Prikazuje se tabela koja sadri Column i New Value Primer: USE Pubs CREATE TABLE NewBooks ( BookID INT IDENTITY(1,1) NOT NULL, BookTitle VARCHAR(80) NOT NULL, Price FLOAT NOT NULL, BookType CHAR(12) NOT NULL CONSTRAINT [booktype_df] DEFAULT ('Undecided'), PubCity VARCHAR(50) NULL ) USE Pubs INSERT INTO NewBooks (BookTitle, PubCity, Price) VALUES ('Life Without Fear', 'Chicago', 124.34)
34
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka Primer ubacivanja vie redova: USE Pubs INSERT INTO NewBooks (BookTitle, BookType, Price) SELECT Title, Type, price FROM Titles WHERE Type = 'mod_cook' UPDATE komanda za modifikovanje podataka Osnovna sintaksa naredbe UPDATE je : UPDATE table_or_view SET update_list [WHERE (condition)] Primer1: USE Pubs UPDATE NewBooks SET Price = Price * 1.1 Primer2: USE Pubs UPDATE NewBooks SET BookType = 'popular' WHERE BookType = 'mod_cook'
Naredba DELETE Sintaksa ove naredbe je: DELETE table_or_view [FROM table_sources] [WHERE where_condition]
35
Glava 7 -Relacije i pristupanje i modifikovanje podataka u SQL server bazi, izvoz i uvoz podataka Primer : Brie sve redove u kojima je Royality = 10 USE Pubs DELETE NewBooks FROM Titles WHERE NewBooks.BookTitle = Titles.Title AND Titles.Royalty = 10 Primer: Brisanje svih vrsta iz Test1 tabele: DELETE NewBooks ili USE Pubs TRUNCATE TABLE NewBooks Uvoz i izvoz podataka 1. 2. 3. 4. 5. Pokrenemo Wizard iz Enterprise Manager-a Izaberemo opciju Data Transformation Services Izabere se Import opcija i izabere se sors baze Uveze se neka access baza ..... Slino je sa izvozom podataka.
36
37
Glava 8 - Administriranje i bezbednost SQL servera Korisnika prava Najjednostavnija definicija korisnikih prava je ono to korisnik moe odnosno ne moe da uradi. Korisnika prava se mogu podeliti u tri kategorije : Pravo za prijavljivanje Pravo da se pristupi odreenoj bazi podataka Pravo da se obavljaju odreene radnje na odreenim objektima u bazi podataka Odobravanje pristupa odreenoj bazi podataka Da bi se NT korisniku local/TestAccount odobrio pristup u bazu podataka NothwindSecure potrebni je izvriti sledeu uskladitenu proceduru: USE NorthwindSecure EXEC sp_grantdbaccess local\TestAccount' Da bi se uklonio pristup u bazu podataka koristi T-SQL naredba : USE NorthwindSecure EXEC sp_revokedbaccess 'local\TestAccount' Izvravanjem ove uskladitene procedure dobija se poruka da je korisnik uklonjen iz baze podataka. Odobravanje dozvole za objekte iz baze podataka Ako sada korisnik TestAccount pokua da izvri sledee SQL naredbe : USE NorthwindSecure SELECT * FROM Region dobija se poruka da korisnik TestAccount nema pravo pristupa toj bazi. Ako sada administrator sistema izvri sledee naredbe: USE NorthwindSecure GRANT SELECT ON Region To [local\TestAccount] korisnik TestAccount e moi da izvrava SELECT naredbu nad ovom tabelom baze TestAccount. Meutim on nee moi da izvri neku drugu naredbu npr. INSERT.
DENY DENY eksplicitno spreava korisnika da pristupi odreenom objektu. Izvrimo sledeu T-SQL naredbu : USE NorthwindSecure DENY ALL ON Employees TO [local\TestAccount]
38
Glava 8 - Administriranje i bezbednost SQL servera Ovom naredbom se zabranjuju sve akcije nad tabelom Employee za korisnika TestAccount . REVOKE Ova naredba ponitava efekte naredbi GRANT i DENY USE NorthwindSecure REVOKE ALL ON Employees TO [local\TestAccount] Serverske uloge i uloge u bazi podataka Uloga je skup prava pristupa koja se korisniku moe dodeliti jednostavnim dodeljivanjem korisnika u ulogu. Serverske uloge su : sysadmin, serveradmin, setupadmin, securityadmin, processadmin, dbcreator, diskadmin i bulkadmin. Uloge u bazi podataka su : db_owner, db_accessadmin, db_datareader, db_datawriter, db_ddladm, db_securityadmin, db_backupoperator, db_denydatareader, db_denydatawriter. Pored toga postoje korisniki definisane uloge u bazi podataka. Kreiranje korisniki definisanih uloga u bazi podataka i dodavanje korisnika u tu ulogu je jednostavno uraditi korienjem Enterprise Manager-a .
39
Glava 9 - Pogledi
9. Pogledi
SQL server nudi mogunost za skladitenje naredbe SELECT kao pogleda.Pogled se moe smatrati virtuelnom tabelom.Moe se koristiti svuda gde se koristi tabela. Pogledi se koriste za izvoenje sledeih funkcija : ograniavanje korisnika samo na odreene kolone ili vrste u tabeli kombinovanje podataka iz vie tabela tako da izgledaju kao jedinstvena tabela da se pojednostavi manipulacija podacima Stvaranje pogleda uz pomo arobnjaka Startujemo wizard Pod Database izbere se Create View Wizard Upie se ime baze Izaberu se tabele iz baze koje e biti prikazane Izabrati kolone koje e biti u pogledu Upiemo ime pogleda Pravljenje pogleda korienjem View Designera Kliknemo na View u okviru nae baze Pritisnemo dugme New u obliku zvezdice Pritisnemo na dugme Add Table Izaberemo kolone iz tabela koje e biti prikazane
View se pregledava isto kao tabela, desnim tasterom se klikne na njega i izabere opcije Return All Rows , a modifikuje sa opcijom Design View Kreiranje pogleda Primer 1: use Pubs GO CREATE VIEW my_view AS SELECT au_lname, au_fname FROM authors Primer 2 : USE Northwind GO CREATE VIEW CustomerOrders AS SELECT o.OrderID, c.CompanyName, c.ContactName FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID
40
Glava 9 - Pogledi Pristupanje podacima kroz pogled 1.Dodavanje podataka kroz pogled
// kreiramo jednostavan pogled USE Northwind GO CREATE VIEW CustomerView AS SELECT CustomerID, CompanyName FROM Customers // dodavanje podataka kroz pogled USE Northwind INSERT CustomerView VALUES ('TEST1', 'Test Company') // menjanje podataka kroz pogled USE Northwind UPDATE CustomerView SET CustomerID = 'TEST2' WHERE CustomerID = 'TEST1'
// brisanje podataka kroz pogled USE Northwind DELETE CustomerView WHERE CustomerID = 'TEST2'
41
10.Uskladitene procedure
Skript je skup naredbi Transact SQL a uskladiten u datoteci.Ove datoteke imaju ekstenziju .sql .S druge strane uskladitene procedure su objekti baze podataka, one se nalaze u datoteci baze podataka, i one se premetaju zajedno sa datotekom ako pravimo repliku baze podataka. Uskladitene procedure komuniciraju sa spoljanjim svetom na dva naina : parametrima i vraenim vrednostima. Parametri su posebna vrsta lokalnih promenljivih definisane u uskladitenoj proceduri.Oni se koriste za predavanje informacija uskladitenoj proceduri (ulazni parametri) ili za primanje podataka iz uskladitenih procedura (izlazni parametri). Vraena vrednost je slina rezultatu funkcije i moe da se dodeli lokalnoj promenljivoj. Vraene vrednosti su uvek celi brojevi.Koriste se za vraanje statusa izvravanja uskladitene procedure. Uskladitena procedura npr. vraa 0 ako je sve dobro prolo ili -1 ako je bilo greke. Postoje sistemske uskladitene procedure i uskladitene procedure koje pravi korisnik.Sistemske uskladitene procedure se nalaze u master bazi podataka i poinju sa _sp. Sistemske i korisniki definisane uskladitene procedure se pozivaju korienjem naredbe EXECUTE ija je sintaksa : EXECUTE ime_procedure Pr. EXECUTE sp_helpdb USE Northwind GO CREATE PROC spShippers AS SELECT * FROM Shippers -- a sada testiranje EXEC spShippers -- kreiramo proceduru za ubacivanje reda u tabelu GO CREATE PROC spInsertShipper @CompanyName nvarchar(40), @Phone nvarchar(24) AS INSERT INTO Shippers VALUES (@CompanyName, @Phone) -- testiranje procedure EXEC spInsertShipper 'Microsoft','123-32129867676'
42
Glava 10 Uskladitene procedure Promene u tabeli Shippers nastale izvravanjem ove uskladitene procedure se mogu videti ponovnim izvravanjem uskladitene procedure spShippers. USE Pubs GO CREATE PROCEDURE [dbo].[ListAuthorNames] AS SELECT [au_fname], [au_lname] FROM [pubs].[dbo].[authors] Izvravanje uskladitene procedure vri se korienjem naredbe : EXECUTE ListAuthorNames , za izvravanje procedure
Kreiranje privremenih uskladitenih procedura Za kreiranje lokalne privremene uskladitene procedure imenu procedure u deklaraciji se dodaje znak # . Ovakva procedura se smeta u TempDB bazu. Za kreiranje globalne privremene uskladitene procedure koristimo dva ova znaka ## ispred imena procedure. Privremena uskladitena procedura postoji dok postoji konekcija na server.
Primer : --create a local temporary stored procedure. CREATE PROCEDURE #localtemp AS SELECT * from [pubs].[dbo].[authors] GO --create a global temporary stored procedure. CREATE PROCEDURE ##globaltemp AS SELECT * from [pubs].[dbo].[authors] GO --create a temporary stored procedure that is local to tempdb. USE TEMPDB GO CREATE PROCEDURE directtemp AS SELECT * from [pubs].[dbo].[authors] GO
43
title_id , title, type,pub_id,price , advance, royalty, ytd_sales tabeli titles koja je objekat baze Pubs
su kolone u
USE Pubs GO CREATE PROCEDURE dbo.SalesForTitle @Title varchar(80), -- This is the input parameter. @YtdSales int OUTPUT, -- This is the first output parameter. @TitleText varchar(80) OUTPUT --This is the second output parameter. AS -- Assign the column data to the output parameters and -- check for a title that's like the title input parameter. -- setovanje izlaznih parametara SELECT @YtdSales = ytd_sales, @TitleText=title FROM titles WHERE title LIKE @Title GO A sada primena ovoga gore: -- Declare variables to receive output values from procedure. DECLARE @y_YtdSales int, @t_TitleText varchar(80) EXECUTE SalesForTitle "%Garlic%", --sets the value of the input parameter. @y_YtdSales OUTPUT, --receives the first output parameter @t_TitleText OUTPUT --receives the second output parameter 44
Glava 10 Uskladitene procedure -- Display the variables returned by executing the procedure. Select "Title" = @t_TitleText, "Number of Sales" = @y_YtdSales GO --------PRIMER 1 USE Uskladistena GO CREATE PROCEDURE dbo.Mnozac @m1 smallint, @m2 smallint, @rezultat int OUTPUT AS SET @rezultat = @m1* @m2 GO ------------------------------------------------------------------------------------------------------------------testiranje procedure mnozac DECLARE @resenje int EXECUTE Mnozac 5,6, @resenje OUTPUT SELECT 'Resenje je:', @resenje GO ------KRAJ PRIMERA 1 ----************************************************************************ ******* --------------------------------------------------------------------------------------------PRIMER 2 USE Northwind GO CREATE PROCEDURE [FiveMostExpensiveProducts] AS SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY UnitPrice desc GO ------------------------------------------------------------------------ testiranje procedure [FiveMostExpensiveProducts] EXEC FiveMostExpensiveProducts EXEC sp_helptext FiveMostExpensiveProducts
45
SELECT OBJECT_ID('FiveMostExpensiveProducts') ----KRAJ PRIMERA 2 -************************************************************************ ********** ---------------------------------------------------------------------------------------PRIMER3 USE Northwind GO CREATE PROCEDURE spInsertShipper @CompanyName nvarchar(40), @Phone nvarchar(24) = NULL AS INSERT INTO Shippers VALUES(@CompanyName, @Phone) ----------------------------- testiranje procedure spInsertShipper EXEC spInsertShipper 'dostavljac','1235-323' EXEC spInserShipper 'dostavljacica' --------************************************************************************ *** -----------------------------------------------------------------------------------PRIMER 4 --------------------------------------------------------------USE Northwind GO CREATE PROC spInsertOrderDATE @CustomerID nvarchar(5), @EmployeeID int, @OrderDate datetime = NULL, @RequiredDate datetime = NULL, @ShippedDate datetime = NULL, @ShipVia int, @Freight money, @ShipName nvarchar(40) = NULL,
46
Glava 10 Uskladitene procedure @ShipAddress nvarchar(60) = NULL, @ShipCity nvarchar(15) = NULL, @ShipRegion nvarchar(15) = NULL, @ShipPostalCode nvarchar(10) = NULL, @ShipCountry nvarchar(15) = NULL, @OrderID int OUTPUT AS /*ocu samo porudzbine ne starije od 7 dana*/ IF DATEDIFF(dd, @OrderDate, GETDATE())>7 SELECT @OrderDate = NULL /*Kreiranje novog zapisa */ INSERT INTO Orders VALUES ( @CustomerID, @EmployeeID, @OrderDate, @RequiredDate, @ShippedDate, @ShipVia, @Freight, @ShipName, @ShipAddress, @ShipCity, @ShipRegion, @ShipPostalCode, @ShipCountry ) /* Move the identity value from the newly inserted record into our output variable */ SELECT @OrderID = @@IDENTITY
47
48
Glava 11 Korisniki definisane funkcije Primer 2: USE Northwind GO CREATE FUNCTION fn_NewRegion (@myinput nvarchar(30)) RETURNS nvarchar(30) BEGIN IF @myinput IS NULL SET @myinput = 'Region nije raspoloziv' RETURN @myinput END -----test Newregion PRINT dbo.fn_NewRegion(NULL) PRINT dbo.fn_NewRegion('Beograd') SELECT LastName, City, dbo.fn_NewRegion(Region) AS Region, Country FROM Employees ----------------------------------------------------------------------------Primer 3 : -- Funkcija koja vraca tabelu CREATE FUNCTION fn_CustomerNamesInRegion ( @RegionParameter nvarchar(30) ) RETURNS table AS RETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @RegionParameter ) SELECT * FROM fn_CustomerNamesInRegion('WA')
49
Glava 12 Okidai
12.Okidai
SQL server prua dve razliite vrste okidaa : okidae AFTER i INSTAED OF.Okidai AFTER se izvravaju posle izvravanja komande za koju je deklarisan, a INSTEAD OF se pozivaju umesto komande. Okidae AFTER moemo napraviti za komande INSERT, UPDATE i DELETE. Okidai AFTER mogu da se naprave za tabele, ne i za poglede Ikidae INSTEAD moemo da definiemo za komande INSERT, UPDATE i DELETE. Mogu da se deklariu za poglede Upotreba komande CREATE TRIGGER CREATE TRIGGER trigger_name ON table_or_view trigger_type command_list AS SQL_statements CREATE TRIGGER dbo.alerter ON dbo.employees FOR INSERT, UPDATE, DELETE -- druga vrsta CREATE TRIGGER dbo.alerter ON dbo.employees INSTEAD OF INSERT, UPDATE, DELETE Primer : USE TestTrigerDB CREATE TABLE Authors ( AuthorID SMALLINT IDENTITY(101,1) NOT NULL, FirstName VARCHAR(30) NOT NULL DEFAULT 'unknown', LastName VARCHAR(30) NOT NULL, YearBorn CHAR(4) NOT NULL DEFAULT ' N/A ', YearDied CHAR(4) NOT NULL DEFAULT ' N/A ', Description VARCHAR(200) NOT NULL DEFAULT 'N/A' )
50
Glava 12 Okidai ------------------------------------------------------------------------------- PRIMER 1 Insert triger USE TestTrigerDB GO CREATE TRIGGER MojInsertTriger ON dbo.authors AFTER INSERT AS PRINT 'Primenili ste komandu insert' ------------------------- testiranje trigera INSERT INTO authors (firstname, lastname, yearborn, yeardied) VALUES ('Max', 'Doe', 1962, 'N/A') ------ ukloni triger da ti ne smeta !!!! ALTER TABLE Authors DISABLE TRIGGER MojInsertTriger --------------------------------------------------------------------------------************************************************************************ ****** -----PRIMER 2 INSTEAD OF triger CREATE TRIGGER dbo.zabrana ON dbo.authors INSTEAD OF INSERT, UPDATE AS PRINT 'Opercije INSERT i UPDATE nisu dozvoljene.' --- testiranje trigera INSERT INTO authors (firstname, lastname, yearborn, yeardied) VALUES ('Marko', 'Markovic', 1989, 'N/A')
51