PL/SQL Typ numeryczny bez zaokrąglania wyniku

0

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

1

Użyj FLOOR(PESEL/10)

0

Twój problem wynika z tego, że próbujesz traktować PESEL jako liczbę podczas gdy jest to numer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1