http://minitorn.tlu.ee/~jaagup Kaks lisaülesannet: Koosta tabeli väljastav funktsioon, kus oleksid arvud ja nende ruudud soovitud arvuni. Nt: SELECT * FROM dbo.ruudutabel(3) 1 1 2 4 3 9 Koosta salvestatud protseduur, mis looks ajutise tabeli ning väljastaks soovitud suuruses korrutustabeli exec korrutustabel 4, 3 1 2 3 4 2 4 6 8 3 6 9 12 use pubs SELECT * FROM AUTHORS alter VIEW autoriloetelu as SELECT top 100 percent * FROM AUTHORS ORDER BY city -- autori nimi, mitu autorit selles linnas CREATE VIEW vaated as SELECT top 100 percent au_lname, a1.city, (SELECT COUNT(*) from AUTHORS a2 WHERE a1.city=a2.city) as kogus FROM authors a1 ORDER BY a1.city select * from vaated; SELECT * FROM autoriloetelu DROP PROCEDURE korruta CREATE PROCEDURE korruta(@arv1 integer, @arv2 integer, @tulemus integer OUTPUT) AS begin IF @arv1<0 BEGIN RAISERROR('sisend negatiivne ', 14, 1) RETURN END SET @tulemus=@arv1*@arv2 end declare @vastus integer exec korruta -4, 6, @vastus OUTPUT select 'tulemus on ', @vastus CREATE PROCEDURE liida(@arv1 integer, @arv2 integer) AS begin RETURN @arv1+@arv2 end declare @a integer exec @a=liida 3, 2 WITH RECOMPILE select @a DECLARE @i INT, @s as VARCHAR(255) SET @i=1 SET @s='' WHILE(@i<=10) BEGIN IF (@i>1) BEGIN SET @s=@s+',' END SET @s=@s+str(@i) SET @i=@i+1 END SELECT @s as tulemus DECLARE crs CURSOR FOR SELECT au_fname FROM authors DECLARE @eesnimi VARCHAR(20) OPEN crs FETCH NEXT FROM crs INTO @eesnimi WHILE @@FETCH_STATUS<>-1 BEGIN PRINT @eesnimi FETCH NEXT FROM crs INTO @eesnimi END CLOSE crs DEALLOCATE crs DROP FUNCTION pii CREATE FUNCTION pii() returns numeric(5, 3) begin return 3.14 end CREATE FUNCTION kahekordista(@sisend integer) returns integer begin return @sisend*2 end select dbo.kahekordista(7) select dbo.pii() DROP PROCEDURE trykiEelmine CREATE PROCEDURE trykiEelmine(@arv int) AS BEGIN declare @abi int print @arv if @arv>1 begin set @abi=@arv-1 exec trykiEelmine @abi end END exec trykiEelmine 7 DROP FUNCTION fTrykiEelmine GO CREATE FUNCTION fTrykiEelmine(@arv int) RETURNS int AS BEGIN declare @abi int if @arv>1 begin set @abi=@arv-1 return @arv+dbo.fTrykiEelmine(@abi) end return 0 END SELECT dbo.fTrykiEelmine(5) 14 Loo tabel teated(id, vastuse_id, sisu). Tulp vastuse_id näitab teatele, millele vastatakse, uue lõime puhul on vastuse_id 0 Täida tabel andmetega. Loo funktsioon teatamaks, mitu kirja moodustab etteantud id-ga teade koos vastustega. Näide: id vastuse_id sisu 1 0 lähme õue 2 0 Tere 3 1 Mis kell 4 1 Kuhu 5 3 Kell 9 SELECT dbo.kirjadearv(1) 4 SELECT dbo.kirjadearv(3) 2 * Muuda funktsiooni nõnda, et väljastataks kirja ning tema alamkirjade kogupikkus sümbolites CREATE TABLE teated(id int, vastuse_id int, sisu varchar(30)) INSERT INTO teated(id, vastuse_id, sisu) VALUES( 5, 3, 'Kell 9' ) CREATE FUNCTION kirjadearv(@kirjanr int) RETURNS int AS begin DECLARE @jid int DECLARE @summa int set @summa=1 DECLARE crs CURSOR FOR SELECT id FROM teated WHERE vastuse_id=@kirjanr OPEN crs FETCH NEXT FROM crs INTO @jid WHILE @@FETCH_STATUS<>-1 BEGIN set @summa=@summa+dbo.kirjadearv(@jid) FETCH NEXT FROM crs INTO @jid END RETURN @summa end SELECT dbo.kirjadearv(2) select len('tere')