Advertisement
patryk

SBD_L10

May 13th, 2015
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.67 KB | None | 0 0
  1. -- ZAD 1
  2. DECLARE
  3.  
  4.   CURSOR C_PRAC(P_ETAT VARCHAR) IS SELECT NAZWISKO FROM PRACOWNICY WHERE ETAT = P_ETAT;
  5.   V_ETAT PRACOWNICY.ETAT%TYPE;
  6.   V_NAZWISKO PRACOWNICY.NAZWISKO%TYPE;
  7.  
  8. BEGIN
  9.   V_ETAT := '&ETAT';
  10.  
  11.   OPEN C_PRAC(V_ETAT);
  12.  
  13.   LOOP
  14.     FETCH C_PRAC INTO V_NAZWISKO;
  15.     EXIT WHEN C_PRAC%NOTFOUND;
  16.     DBMS_OUTPUT.PUT_LINE(V_NAZWISKO);
  17.    
  18.   END LOOP;
  19.   CLOSE C_PRAC;
  20.  
  21.   EXCEPTION
  22.   WHEN NO_DATA_FOUND THEN
  23.       DBMS_OUTPUT.PUT_LINE('NIE ISTNIEJE ETAT O NAZWIE: ' || V_ETAT);
  24.  
  25. END;
  26. /
  27.  
  28. -- ZAD 2
  29. DECLARE
  30.   CURSOR C_PRAC
  31.     IS SELECT NAZWISKO, PLACA_POD + PLACA_POD * 0.1 FROM PRACOWNICY WHERE ETAT = 'PROFESOR';
  32.  
  33.   V_NAZWISKO PRACOWNICY.NAZWISKO%TYPE;
  34.   V_PLACA_POD PRACOWNICY.PLACA_POD%TYPE;
  35.  
  36. BEGIN
  37.   OPEN C_PRAC;
  38.  
  39.   LOOP
  40.     FETCH C_PRAC INTO V_NAZWISKO, V_PLACA_POD;
  41.     EXIT WHEN C_PRAC%NOTFOUND;
  42.     IF (V_PLACA_POD > 2000) THEN
  43.       RAISE_APPLICATION_ERROR(-20010, 'PENSJA PO PODWYŻCE PRZEKROCZYA BY 2000!');
  44.     END IF;
  45.     DBMS_OUTPUT.PUT_LINE(V_NAZWISKO || ' ' || V_PLACA_POD);
  46.   END LOOP;
  47.   CLOSE C_PRAC;
  48.  
  49.  
  50. END;
  51. /
  52.  
  53. -- ZAD 3
  54. DECLARE
  55.   V_ID_PRAC PRACOWNICY.ID_PRAC%TYPE;
  56.   V_NAZWISKO PRACOWNICY.NAZWISKO%TYPE;
  57.   V_ID_ZESP PRACOWNICY.ID_ZESP%TYPE;
  58.   V_PLACA_POD PRACOWNICY.PLACA_POD%TYPE;
  59.  
  60.   ERR_NUM NUMBER;
  61.   ERR_MSG VARCHAR(30);
  62. BEGIN
  63.   V_ID_PRAC := '&ID_PRAC';
  64.   V_NAZWISKO := '&V_NAZWISKO';
  65.   V_PLACA_POD := '&V_PLACA_POD';
  66.   V_ID_ZESP := '&V_ID_ZESP';
  67.  
  68.   INSERT INTO PRACOWNICY VALUES (V_ID_PRAC, V_NAZWISKO, NULL, NULL, NULL, V_PLACA_POD, NULL, V_ID_ZESP);
  69.  
  70.   EXCEPTION
  71.     WHEN OTHERS THEN
  72.       ERR_NUM := SQLCODE;
  73.      
  74.       IF (ERR_NUM = -1) THEN ERR_MSG := 'IDENTYFIKATORY SIĘ DUBLUJĄ!';
  75.       ELSIF (ERR_NUM = -1400) THEN ERR_MSG := 'WARTOŚĆ IDENTYFIKATORA PUSTA!';
  76.       ELSIF (ERR_NUM = -2290) THEN ERR_MSG := 'WARTOŚĆ PLACY MNIEJSZA NIŻ 101!';
  77.       ELSIF (ERR_NUM = -2291) THEN ERR_MSG := 'PODANO NIEISTNIEJĄCY ZESPÓL!';    
  78.       END IF;
  79.      
  80.     DBMS_OUTPUT.PUT_LINE(ERR_MSG);
  81. END;
  82. /
  83.  
  84. -- ZAD 4
  85. DECLARE
  86.   V_NAZWISKO PRACOWNICY.NAZWISKO%TYPE;
  87.   C_ILE_PRAC NUMBER;
  88.   ERR_NUM NUMBER;
  89.  
  90. BEGIN
  91.   V_NAZWISKO := '&PODAJ_NAZWISKO';
  92.  
  93.   SELECT COUNT(*) INTO C_ILE_PRAC FROM PRACOWNICY WHERE NAZWISKO = V_NAZWISKO;
  94.  
  95.   IF ( C_ILE_PRAC = 0) THEN
  96.     RAISE_APPLICATION_ERROR(-20020, 'NIE ISTNIEJE TAKI PRACOWNIK!');
  97.   ELSIF ( C_ILE_PRAC > 1) THEN
  98.     RAISE_APPLICATION_ERROR(-20030, 'NIEJEDNOZNACZNE WSKAZANIE PRACOWNIKA');
  99.   END IF;
  100.  
  101.   DELETE FROM PRACOWNICY WHERE NAZWISKO = V_NAZWISKO;
  102.  
  103.   EXCEPTION
  104.     WHEN OTHERS THEN
  105.        ERR_NUM := SQLCODE;
  106.        IF (ERR_NUM = -2992) THEN RAISE_APPLICATION_ERROR(-20040, 'NIE MOZESZ USUNAC PRZELOZONEGO!');
  107.        END IF;
  108. END;
  109. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement