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.