首页 > 解决方案 > ORA-01722无效的数字,尽管没有将任何内容转换为数字

问题描述

我第一次为一个学校项目弄清楚 PL/SQL,我必须编写一个带有布尔函数的包,该函数接受用户 ID 和密码,并检查该用户是否具有该密码。这是包体的相关部分。

create package body user_management as
    -- more functions
    function check_password(
        id in users.id%type,
        password in varchar
    ) return boolean is
        valid number;
    begin
        select ( -- Error occurs here
            case when exists (
                select * from users u
                where (u.username = id)
                and (hash_password(password) = u.password)
            ) then 1 else 0 end
        ) into valid from dual;

        if valid = 1 then
            return true;
        else
            return false;
        end if;
    end;
    -- more procedures
end user_management;

但是,每当我尝试调用该函数时,都会在 select 语句的开头收到错误“无效号码”。我用谷歌搜索了这个错误,所有结果都表明当无法将字符串转换为数字时会发生此错误。但我不认为我曾经在这里这样做过。当我的选择查询选择一个计数(*)而不是像我现在所做的那样使用案例时,发生了同样的错误。

为什么我会看到此错误,我该如何解决?任何帮助将不胜感激。

标签: sqlplsqlplsql-package

解决方案


推荐阅读