Dajem jedan skolski primer
(nije nalickan do kraja ali je koncept regularan i tako cemo raditi) koji radi i koji prebacuje profakturu u fakturum, upisuje jedan slog u zaglavlje fakture na osnovu podataka iz profakture i onoiko slogova stavki koliko ima u stavkama profakture.
ovo radi nad shemom aragon-a, pa proanalizirajte kako se to radi jer cemo SVE OBRADE raditi na ovaj nacin kroz procedure.
Naravno, sada nisam imao vremena da definisem i EXCEPTION HANDLER-e i slicno ali kada napravimo sve za produkciju to ce izgledati mnogo detaljnije.
SRC CODE:

/*brisemo proceduru ako postoji*/
DROP PROCEDURE IF EXISTS p_profak_fak;
/* kreiramo proceduru p_profak_fak
* ulazni parametri su broj (ID) profakture,
* i sifra radnika koji radi obradu*/
CREATE PROCEDURE p_profak_fak(IN p_brojprofakture int,IN p_sifrad int)
COMMENT 'PREBACIVANJE PROFAKTURA => FAKTURA'
BEGIN
/*upisujemo u zaglavlje fakture */
INSERT
INTO f_fakzag
(dat_izd,
parid,
status_dok,
parime,
datknj,
genbroj,
tip,
sifrad,
brspoljdo,
nacnas,
datum_valute,
datum_prometa)
/*na osnovu SELECT-a odabrane profakture*/
SELECT(SELECT now()
FROM dual) /*tekuce vreme*/,parid /*sifra partnera je ista*/,
status_dok /*
dokument je OK */
,parime /*naziv partnera je isti prepisuje se*/,NULL /*datum
knjizenja je NULL-faktura nije proknjizena*/
,NULL /*GENBROJ je NULL unece se triggerom*/,'U' /*ULAZNA FAKTURA*/
,p_sifrad,id /*ovo je broj profakture SPOLJNI DOKUMENT*/,'P' /*
faktura je nastala od profakture*/
,datum_valute /*prepisuje se*/,datum_prometa
/*prepisuje se*/
FROM f_profakzag
/* BIRAMO SAMO JEDNU PROFAKTURU
* SA WHERE ID USLOVOM*/
WHERE id = p_brojprofakture;
/* potvrdimo transakciju za zaglavlje
* zbog ID-fakture da uensemo u stavke*/
COMMIT;
/*UNOSIMO STAVKE FAKTURE*/
INSERT
INTO f_faktab
(id,
zagid,
sifrob,
opis,
kol,
cena,
pdvproc,
vrednost,
parbatproc,
ukupno)
/*NA OSNOVU SELECT-a iz stavki profakture*/
SELECT id,(SELECT max(id)
FROM f_fakzag) /*zaglavlje se trazi upitom*/,sifrob,opis,kol,cena
,pdvproc,vrednost,rabatproc,ukupno
FROM f_profaktab pft
WHERE pft.zagid = p_brojprofakture;
/*potvrdimo citavu transakciju*/
COMMIT;
END
PROCEDURU POZIVATE SA:
call p_profak_fak(1,1);
www.baco.co.yu