Imam jedan primer sa ispita. Navodno je resenje tacno (valjda ga je asistenkinja uradila), ali meni nece da radi.
Transakcije koje šalterski radnik unese preko odgovarajuće ekranske forme se evidentiraju u dnevniku transakcije. Proceduralnim mehanizmima baza podataka bi trebalo obezbediti da se za svaku novu transakciju koja se tiče nekog internog računa ista automatski upiše i u karticu računa. Da li je račun naveden u transakciji interni ili eksterni (otvoren kod druge banke) može se proveriti upitom nad tabelom računa. Ukoliko u toj tabeli postoji račun sa navedenim brojem u pitanju je interni račun. Za transakcije tipa uplata (‘U’) iznos transakcije se u kartici prikazuje kao iznos duguje, a za isplate (tip transakcije ‘I’) kao iznos potražuje. Novo stanje računa se dobija uvećanjem ili smanjenjem prethodnog stanja računa.
Atachovala sam i ER model baze.
kREIRANJE BAZE PODATAKA
CREATE DATABASE transakcije
GO
use transakcije
CREATE TABLE dnevnikTransakcije
(
ID_rad integer not null ,
DatTransak Datetime not null,
RedniBroj INT IDENTITY not null,
vremetransak datetime null,
sifVrsteTransak integer not null,
brRacuna char(16) null,
iznos decimal(12,2) null,
napomena varchar(100)
)
go
CREATE TABLE racun
(
brRacuna char(16) not null,
datOtvaranja datetime null,
BrZahtevateva integer null,
IdOrganJedinice int null,
sifKlijenta integer null,
IDtretmanaKlijenta integer null,
SIFnacinaIzvrs integer null,
limit integer null,
status char(1) null,
datDefStatusa date null
)
go
CREATE TABLE vrstaTransakcije
(
sifVrsteTransak integer not null,
nazVrsteTransak varchar(40),
tipTransak char(1)
)
GO
CREATE TABLE KarticaRacuna
(
brRacuna char(16) not null,
RedniBroj integer NOT null,
DatTransak datetime not null,
vremetransak datetime null,
sifVrsteTransak integer not null,
iznosDugovanja decimal(12,2) null,
iznosPotrazivanja decimal(12,2) null,
stanje decimal (12,2) null
)
USE transakcije
GO
CREATE TRIGGER transakcijatriger
ON dnevnikTransakcije
AFTER INSERT
AS
DECLARE @datTransak date,
@vremetransak datetime,
@sifVrsteTransak integer,
@brRacuna char(16),
@iznos dec(12,2),
@RedniBroj integer,
@stanje dec(12,2)
*******************************************************************
*********************************************************************
resenje koje nece da mi radi:
------------------
------------------
DECLARE transakcija_cursor CURSOR
FOR
SELECT dattransak, vremetransak, sifVrsteTransak, brRacuna, iznos
FROM Inserted
OPEN transakcija_cursor
FETCH transakcija_cursor
INTO @dattransak, @vremetransak, @sifVrsteTransak, @brRacuna, @iznos
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS (SELECT * FROM racun WHERE brracuna = @brracuna)
BEGIN
select @RedniBroj =max(rednibroj)
from dnevniktransakcije
where rednibroj = @rednibroj
--
SELECT @STANJE = stanje
FROM karticaRacuna
WHERE brRacuna = @brRacuna
IF (SELECT tiptransak FROM vrstaTransakcije WHERE sifVrsteTransak = @sifVrsteTransak) = 'U'
begin
INSERT karticaRacuna
VALUES (@brRacuna, @redniBroj+1, @datTransak, @vremeTransak, @SifVrsteTransak, @iznos, 0 , @stanje+@iznos)
END
ELSE
BEGIN
INSERT karticaRacuna
VALUES (@brRacuna, @redniBroj+1, @datTransak, @vremeTransak, @SifVrsteTransak, 0, @IZNOS, @stanje-@iznos)
END
END
END
FETCH transakcija_cursor
INTO @dattransak, @vremetransak, @sifVrsteTransak, @brRacuna, @iznos
CLOSE transakcija_cursor
DEALLOCATE transakcija_cursor
---------------------------------------
tabela VRSTE_TRANSAKCIJA mi je ispunjena
Uabcila sam jedan red u tabelu "RACUN", A nako toga sam pokusala da pokrenem triger pokusajem insertovanja tabele DNEVNIK_TRANSAKCIJA:
INSERT INTO dnevnikTransakcije
VALUES
(1,'9-9-2010', getdate(), 2, '840-1045666-13', 18200, 'uplata')
-- medjutim, pokretanjem naredbe EXECUTE dobijam sledecu poruku
Msg 515, Level 16, State 2, Procedure transakcijatriger, Line 42
Cannot insert the value NULL into column 'RedniBroj', table 'transakcije.dbo.KarticaRacuna'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Kao sto se i vidi iz prilozenog, javlja mi da se unutar INSERT ISKAZA , ne moze uneti kolona sa vrednoscu NULL, iako sam za tabelu DNEVNIK_TRANSAKCIJA devinisala tip podatka int i njemu pridruzila IDENTITY da bi se sam kreirao redni broj. Nemam pojma sta da radim . Otprilike bi me ovakav zadatak cekao na ispitu. Da li neko meze da mi pomogne, i da mi ukaze na greske, a naravno, ne menjajuci previse sintaksu.
[Ovu poruku je menjao nemanjal dana 15.09.2010. u 17:28 GMT+1]
[Ovu poruku je menjao nemanjal dana 15.09.2010. u 17:30 GMT+1]
Nemsho