我对SQL Server的T-SQL很有经验,但最近开始使用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,这就是我用作输入变量的东西。它返回一个布尔值,再次,这就是我正在使用的。
正如我所说,这是基本代码,所以我认为我缺少一些基本的东西。
答案 0 :(得分:3)
返回SQL数据类型,例如VARCHAR2。另外,我建议不要使用WHEN OTHERS。此外,您不需要对双重查询:
create or replace
function IS_NUMBER(str in varchar2) return varchar2
IS
n number;
BEGIN
n := to_number(str);
return 'Y';
EXCEPTION WHEN VALUE_ERROR THEN
return 'N';
END;