Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DECLARE
- BEGIN
- FOR KOT IN (SELECT PSEUDO FROM KOCURY)
- LOOP
- EXECUTE IMMEDIATE
- 'CREATE TABLE TMP_KONTO_' || KOT.PSEUDO ||
- '(NR NUMBER(2) CONSTRAINT ' || KOT.PSEUDO || '_nr_pk PRIMARY KEY,' ||
- 'WAGA_MYSZY NUMBER(2) CONSTRAINT ' || KOT.PSEUDO ||'_wa_ch CHECK (waga_myszy BETWEEN 15 AND 20))';
- END LOOP;
- END;
- CREATE OR REPLACE PROCEDURE PRZYJMIJ_NA_STAN(PSEUDO KOCURY.PSEUDO%TYPE, DZIEN DATE) IS
- PRAGMA AUTONOMOUS_TRANSACTION;
- TYPE TAB_MYSZY IS TABLE OF MYSZY%ROWTYPE INDEX BY BINARY_INTEGER;
- MYSZKI TAB_MYSZY;
- QUERY VARCHAR2(500);
- BEGIN
- QUERY :=
- 'SELECT NR, ''' || PSEUDO ||''', NULL, WAGA_MYSZY, ''' || DZIEN || ''', NULL ' ||
- 'FROM TMP_KONTO_' || PSEUDO;
- EXECUTE IMMEDIATE QUERY
- BULK COLLECT INTO MYSZKI;
- FORALL I IN 1..MYSZKI.LAST
- INSERT INTO MYSZY VALUES MYSZKI(I);
- QUERY := 'DELETE FROM TMP_KONTO_' || PSEUDO;
- EXECUTE IMMEDIATE QUERY;
- COMMIT;
- END;
- INSERT INTO TMP_KONTO_ZERO VALUES (1, 16);
- INSERT INTO TMP_KONTO_ZERO VALUES (2, 17);
- INSERT INTO TMP_KONTO_ZERO VALUES (3, 18);
- COMMIT;
- SELECT * FROM MYSZY WHERE DATA_ZLOWIENIA = SYSDATE;
- CALL PRZYJMIJ_NA_STAN('ZERO', SYSDATE);
- SELECT * FROM MYSZY WHERE LOWCA = 'ZERO' AND DATA_ZLOWIENIA > '2018-01-08';
- CREATE OR REPLACE PROCEDURE WYPLATA IS
- PRAGMA AUTONOMOUS_TRANSACTION;
- TYPE TAB_PSEUD IS TABLE OF KOCURY.PSEUDO%TYPE;
- TYPE TAB_LICZB IS TABLE OF NUMBER;
- KOTY TAB_PSEUD;
- PENSJE TAB_LICZB;
- ZJEDZONE TAB_LICZB;
- NUMERY_MYSZY TAB_LICZB;
- ZJADACZE TAB_PSEUD DEFAULT TAB_PSEUD();
- DZIEN DATE DEFAULT SYSDATE;
- SRODA DATE;
- NR NUMBER DEFAULT 0;
- SA_GLODNI BOOLEAN DEFAULT TRUE;
- ZLY_DZIEN EXCEPTION;
- BEGIN
- SRODA := NEXT_DAY(LAST_DAY(DZIEN) - 7, 'ŚRODA');
- IF DZIEN != SRODA THEN
- RAISE ZLY_DZIEN;
- END IF;
- SELECT NR_MYSZY
- BULK COLLECT INTO NUMERY_MYSZY
- FROM MYSZY
- WHERE ZJADACZ IS NULL;
- SELECT PSEUDO,
- NVL(PRZYDZIAL_MYSZY, 0) + NVL(MYSZY_EXTRA, 0),
- 0
- BULK COLLECT INTO KOTY, PENSJE, ZJEDZONE
- FROM KOCURY
- CONNECT BY PRIOR PSEUDO = SZEF
- START WITH SZEF IS NULL
- ORDER BY LEVEL;
- WHILE NR < NUMERY_MYSZY.LAST AND SA_GLODNI
- LOOP
- FOR I IN 1..KOTY.LAST
- LOOP
- IF ZJEDZONE(I) < PENSJE(I) THEN
- NR := NR + 1;
- ZJADACZE.EXTEND;
- ZJADACZE(NR) := KOTY(I);
- END IF;
- EXIT WHEN NR = NUMERY_MYSZY.LAST;
- END LOOP;
- SA_GLODNI := FALSE;
- FOR I IN 1..KOTY.LAST
- LOOP
- IF ZJEDZONE(I) < PENSJE(I) THEN
- SA_GLODNI := TRUE;
- EXIT;
- END IF;
- END LOOP;
- END LOOP;
- FORALL I IN 1..ZJADACZE.LAST
- UPDATE MYSZY
- SET ZJADACZ = ZJADACZE(I),
- DATA_WYDANIA = DZIEN
- WHERE NR_MYSZY = NUMERY_MYSZY(I);
- COMMIT;
- EXCEPTION
- WHEN ZLY_DZIEN THEN
- DBMS_OUTPUT.PUT_LINE('WYPŁATA POWINNA BYĆ W OSTATNIĄ ŚRODĘ MIESIĄCA!');
- END WYPLATA;
- SELECT * FROM MYSZY WHERE ZJADACZ IS NULL OR DATA_WYDANIA IS NULL;
- CALL WYPLATA();
- SELECT * FROM MYSZY WHERE ZJADACZ IS NULL OR DATA_WYDANIA IS NULL;
- ROLLBACK;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement