Einfache PL / SQL-Funktion zum Testen, ob eine Zeichenfolge eine Zahl ist

Ich habe Erfahrung mit T-SQL von SQL Server, arbeite jedoch seit kurzem an einem Projekt mit einer Oracle-Datenbank (11g) und habe einige Probleme beim Schreiben von scheinbar einfachem Code.

Ich muss testen, ob eine Reihe von Werten numerisch ist, und sie nur dann in eine Tabelle einfügen, wenn dies der Fall ist. PL / SQL scheint keine is_number-Funktion zu haben, daher habe ich meine eigene basierend auf einer AskTom-Frage geschrieben.

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;

Irgendwann möchte ich diese Funktion in einer WHERE-Klausel verwenden, aber jetzt versuche ich nur, sie überhaupt zum Laufen zu bringen:

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

Wenn ich in SQL Developer versuche, dies auszuführen, erhalte ich den folgenden Fehlerbericht:

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:

Der Fehlerbericht ist unkompliziert, macht aber keinen Sinn. Die Funktion akzeptiert varchar2 und das verwende ich als Eingabevariable. Es gibt einen Booleschen Wert zurück und genau das verwende ich.

Wie gesagt, dies ist ein grundlegender Code, daher gehe ich davon aus, dass mir etwas Grundlegendes fehlt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage