Простая функция PL / SQL для проверки, является ли строка числом
У меня есть опыт работы с T-SQL из SQL Server, но недавно я начал работать над проектом, использующим базу данных Oracle (11g), и у меня возникли некоторые проблемы с написанием того, что кажется базовым кодом.
Мне нужно проверить, являются ли набор значений числовыми, и вставить их в таблицу, только если они есть. PL / SQL, похоже, не имеет функции is_number, поэтому я написал свою собственную на основе вопроса 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;
В конце концов, я хотел бы использовать эту функцию в предложении WHERE, но сейчас я просто пытаюсь заставить ее работать вообще:
declare
str varchar2(1);
n boolean;
begin
str := '0';
select ca_stage.is_number(str) into n from dual;
end;
В SQL Developer, попытка запустить это дает мне следующее сообщение об ошибке:
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:
Отчет об ошибке прост, но не имеет смысла. Функция принимает varchar2, и это то, что я использую в качестве входной переменной. Возвращает логическое значение, и опять же, это то, что я использую.
Как я уже сказал, это базовый код, поэтому я предполагаю, что мне не хватает чего-то фундаментального.