plsql - 用于测试字符串是否为数字的简单 PL/SQL 函数

标签 plsql oracle11g

我对 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,这就是我用作输入变量的内容。它再次返回一个 bool 值,这就是我正在使用的。

正如我所说,这是基本代码,所以我假设我遗漏了一些基本代码。

最佳答案

返回一个 SQL 数据类型,例如变量 2。另外,我建议不要使用 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;

关于plsql - 用于测试字符串是否为数字的简单 PL/SQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572759/

相关文章:

oracle - 选择和更新之间的竞争条件

sql - 如何修复 ORA-06575 : Package or function is in an invalid state error

mysql - 如果在另一个表中找到记录,则从表中选择

oracle - 将 select 语句传递给 Oracle PLSQL

oracle - PL/SQL 中的嵌套游标

oracle - 在Oracle中处理错误号码

java - 基于两个 COLUMNS 的 SQL Distinct 以及这两列值的交换应被视为一行

hadoop - 如何为 sqoop 1.4.6 启用 oraoop

sql - plsql/cursors 处理异常并返回执行流程

plsql - 检查 plsql 中的记录 IS NOT NULL