Função simples de PL / SQL para testar se uma string é um número

Tenho experiência com o T-SQL do SQL Server, mas comecei recentemente a trabalhar em um projeto utilizando um banco de dados Oracle (11g) e estou tendo alguns problemas para escrever o que parece ser um código básico.

Eu preciso testar se um conjunto de valores é numérico e só inseri-los em uma tabela se eles são. A PL / SQL não parece ter uma função is_number, então escrevi a minha com base em uma pergunta 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;

Eventualmente, eu gostaria de usar essa função em uma cláusula WHERE, mas por enquanto eu estou apenas tentando fazer com que ela seja executada:

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

No SQL Developer, tentando executar isso me dá o seguinte relatório de erro:

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:

O relatório de erros é direto, mas não faz sentido. A função aceita um varchar2 e é isso que estou usando como uma variável de entrada. Ele retorna um booleano e, novamente, é o que estou usando.

Como eu disse, este é o código básico, então eu suponho que estou perdendo algo fundamental.

questionAnswers(1)

yourAnswerToTheQuestion