Co dziwne, PL/SQL nie wymusza INTEGER
parametry. Spodziewałbym się, że Oracle albo niejawnie przekonwertuje dane, albo wyrzuci błąd, jeśli 5.2 zostało przekazane do INTEGER
parametr. Wygląda na to, że musisz dodać własną walidację:
create or replace procedure test_procedure(a integer) is
begin
if a is not null and a <> trunc(a) then
raise_application_error(-20000, 'Parameter must be an integer');
end if;
end;
/
--Works
begin
test_procedure(5.0);
end;
/
--Fails with "ORA-20000: Parameter must be an integer".
begin
test_procedure(5.2);
end;
/