Citat:
MarkoBalkan: jel imaš kakve primjere za storne za firebird?
Evo, izdvojio sam par minuta da napravim jednostavan primer za pisanje procedura u Fiebird - u, nadam se da ću utisak o pisanju procedura u Firebird - u, kao užasan, malo poboljšati...
Zahtev:
prikazati ispite za broj index - a koji se unese, ukoliko je ocena 5 neka se ispiše da student nije položio u suprotnom da je položio.
Spisak tabela:
Code:
CREATE TABLE STUDENTI (
BR_INDEX INTEGER NOT NULL,
IME VARCHAR(30) CHARACTER SET WIN1250,
PREZIME VARCHAR(30) CHARACTER SET WIN1250
);
CREATE TABLE ISPITI (
BR_ISPIT INTEGER NOT NULL,
NAZIV VARCHAR(30) CHARACTER SET WIN1250
);
CREATE TABLE STATUS (
BR_INDEX INTEGER NOT NULL,
BR_ISPIT INTEGER NOT NULL,
OCENA INTEGER
);
ALTER TABLE STUDENTI ADD CONSTRAINT PK_STUDENTI PRIMARY KEY (BR_INDEX);
ALTER TABLE ISPITI ADD CONSTRAINT PK_ISPITI PRIMARY KEY (BR_ISPIT);
ALTER TABLE STATUS ADD CONSTRAINT PK_STATUS PRIMARY KEY (BR_INDEX, BR_ISPIT);
INSERT INTO STUDENTI (BR_INDEX, IME, PREZIME) VALUES (104052, 'Petar', 'Petrovic');
INSERT INTO ISPITI (BR_ISPIT, NAZIV) VALUES (1, 'Informacione tehnologije');
INSERT INTO ISPITI (BR_ISPIT, NAZIV) VALUES (2, 'Internet programiranje');
INSERT INTO ISPITI (BR_ISPIT, NAZIV) VALUES (3, 'Uvod u ERP sisteme');
INSERT INTO STATUS (BR_INDEX, BR_ISPIT, OCENA) VALUES (1, 104052, 8);
INSERT INTO STATUS (BR_INDEX, BR_ISPIT, OCENA) VALUES (2, 104052, 7);
INSERT INTO STATUS (BR_INDEX, BR_ISPIT, OCENA) VALUES (3, 104052, 5);
Procedura:
Code:
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE "STUDENT_SPISAK_ISPITI"
(
"BR_INDEX" INTEGER
)
RETURNS
(
"I_BR_INDEX" INTEGER,
"I_IME" VARCHAR(30) CHARACTER SET WIN1250,
"I_PREZIME" VARCHAR(30) CHARACTER SET WIN1250,
"I_PREDMET" VARCHAR(30) CHARACTER SET WIN1250,
"I_OCENA" INTEGER,
"I_STATUS" VARCHAR(30) CHARACTER SET WIN1250
)
AS
DECLARE VARIABLE V_OCENA INTEGER;
BEGIN
FOR SELECT s.br_index,
s.ime,
s.prezime,
i.naziv,
st.ocena
FROM STATUS st
INNER JOIN STUDENTI s ON s.br_index = st.br_index
INNER JOIN ISPITI i ON i.br_ispit = st.br_ispit
WHERE s.br_index = :BR_INDEX
INTO I_BR_INDEX,
I_IME,
I_PREZIME,
I_PREDMET,
:V_OCENA
DO BEGIN
IF (V_OCENA = 5) THEN BEGIN
I_OCENA = V_OCENA;
I_STATUS = 'NIJE POLOZIO';
END ELSE BEGIN
I_OCENA = V_OCENA;
I_STATUS = 'POLOZIO';
END
SUSPEND;
END
END^
SET TERM ; ^
U proceduru sam ubacio i rad sa varijablama. Rzultat koji treba da dobijemo:
Nadam se da sam malo pomogao.
Someone's sitting in the shade today because someone planted a tree a long time ago.