Witam,
tworze funkcje która ma sprawdzać poprawność wpisanego PESEL'u. ustawiłem typy zmiennych na INTEGER i robie MODULO z tej liczby aby uzyskać ostatnią, która zapisuje do innej zmiennej, potem dziele przez 10 żeby uzyskać pesel bez ostatniej liczby i tak aż wszystkie liczby wyświetli. Problem polega na tym że jak mam wartość PESEL z liczbą większą niż 5 na końcu i ją dziele na 10 to liczbę przed ostatnią zaokrągla. Na przykład PESEL = 930201015, po podzieleniu przez 10 PESEL = 93020102 zamiast PESEL = 93020101.
Potrafi ktoś mi wytłumaczyć czemu tak się dzieje i podpowiedzieć jakieś rozwiązanie?
Niżej zamieszczam kod oraz wyniki
CREATE OR REPLACE FUNCTION validate_pesel (PESEL PLS_INTEGER)
RETURN INTEGER IS
is_true BOOLEAN :=TRUE;
PESEL_NUMBER PLS_INTEGER;
PESEL_INT PLS_INTEGER := PESEL;
TYPE LIST_OF_PESEL IS TABLE OF INTEGER;
PESEL_TAB LIST_OF_PESEL;
BEGIN
--PESEL_TAB.EXTEND (11);
FOR i IN 1..11 LOOP
PESEL_NUMBER :=MOD(PESEL_INT,10);
PESEL_INT:=PESEL_INT/10;
DBMS_OUTPUT.PUT_LINE(PESEL_NUMBER||' '||PESEL_INT);
END LOOP;
RETURN PESEL;
END;
/
Wyniki (pierwsza liczba w wierszu to liczba z modulo, druga to wynik po "obcięciu" ostatniej cyfry)
93020101523 - PESEL
3 9302010152
2 930201015
5 93020102
2 9302010
0 930201
1 93020
0 9302
2 930
0 93
3 9
9 1
Pozdrawiam