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.