Prosta funkcja PL / SQL do sprawdzania, czy łańcuch jest liczbą

Mam doświadczenie w pracy z T-SQL z SQL Server, ale ostatnio zacząłem pracować nad projektem wykorzystującym bazę danych Oracle (11g) i piszę pewne problemy, które wydają się być podstawowym kodem.

Muszę sprawdzić, czy zestaw wartości jest liczbowy i wstawić je tylko do tabeli, jeśli są. PL / SQL nie wydaje się mieć funkcji is_number, więc napisałem własną na podstawie pytania AskTom.

create or replace 
function          IS_NUMBER(str in varchar2) return boolean
IS
  n number;
BEGIN
  select to_number(str) into n from dual;
  return (true);
EXCEPTION WHEN OTHERS THEN
  return (false);
END;

Ostatecznie chciałbym użyć tej funkcji w klauzuli WHERE, ale na razie próbuję uruchomić ją w ogóle:

declare
  str varchar2(1);
  n boolean;
begin
  str := '0';
  select ca_stage.is_number(str) into n from dual;
end;

W SQL Developer, próbując uruchomić ten program, otrzymuję następujący raport o błędzie:

Error report:
ORA-06550: line 6, column 39:
PLS-00382: expression is of wrong type
ORA-06550: line 6, column 19:
PLS-00382: expression is of wrong type
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Raport o błędzie jest prosty, ale nie ma sensu. Funkcja akceptuje varchar2 i to właśnie używam jako zmiennej wejściowej. Zwraca wartość logiczną i znowu używam tego.

Jak powiedziałem, jest to podstawowy kod, więc zakładam, że brakuje mi czegoś fundamentalnego.

questionAnswers(1)

yourAnswerToTheQuestion