gpt4 book ai didi

oracle - SQL*Plus 用户输入异常处理

转载 作者:行者123 更新时间:2023-12-04 05:01:19 26 4
gpt4 key购买 nike

我有一个简单的问题。
我在代码中声明了两个变量:

v_n NUMBER(3) := &sv_n;
v_m NUMBER(3) := &sv_m;

如何防止用户输入不是数字符号?并引发异常,或类似的东西。

我试图找到这样的例子,但没有运气。我还尝试编写一个代码来检测输入是否为数字,但问题是,如果我的输入是例如“a”或“acas”或来自字母的其他一些符号,则会引发此错误
Error report:
ORA-06550: line 4, column 20:
PLS-00201: identifier 'A' must be declared
ORA-06550: line 4, column 7:
PL/SQL: Item ignored

而且我什至无法检查输入是否为数字。

任何解决方案或建议?如果我能处理这个错误并引发自定义异常,那就太好了。

最佳答案

一种选择是定义 SQL*Plus 脚本以接受字符串而不是数字,然后定义一个尝试将输入转换为数字的函数。如果你声明一个函数 my_to_number

SQL> ed
Wrote file afiedt.buf

1 create or replace function my_to_number( p_str in varchar2 )
2 return number
3 is
4 l_num number;
5 begin
6 l_num := to_number( p_str );
7 return l_num;
8 exception
9 when others
10 then
11 raise_application_error( -20001, p_str || ' is not a number' );
12* end;
SQL> /

Function created.

那么您的 SQL*Plus 脚本可能看起来像这样。如果用户输入有效数字,脚本将按预期工作。如果不是,则会引发函数中定义的自定义错误。
SQL> declare
2 v_n number(3) := my_to_number( '&sv_n' );
3 begin
4 dbms_output.put_line( 'The number is ' || v_n );
5 end;
6 /
Enter value for sv_n: 123
old 2: v_n number(3) := my_to_number( '&sv_n' );
new 2: v_n number(3) := my_to_number( '123' );
The number is 123

PL/SQL procedure successfully completed.

SQL> ed
Wrote file afiedt.buf

1 declare
2 v_n number(3) := my_to_number( '&sv_n' );
3 begin
4 dbms_output.put_line( 'The number is ' || v_n );
5* end;
SQL> /
Enter value for sv_n: abc
old 2: v_n number(3) := my_to_number( '&sv_n' );
new 2: v_n number(3) := my_to_number( 'abc' );
declare
*
ERROR at line 1:
ORA-20001: abc is not a number
ORA-06512: at "SCOTT.MY_TO_NUMBER", line 11
ORA-06512: at line 2

关于oracle - SQL*Plus 用户输入异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16129569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com