【问题标题】:Plsql procedure and exceptionplsql过程和异常
【发布时间】:2018-08-13 13:08:59
【问题描述】:

编写一个 PL/SQL 过程:当有人输入一个数字时,它会打印该数字。否则会显示错误信息。

【问题讨论】:

  • 那么,您有问题吗?除了,“有人会帮我做作业吗?”

标签: oracle stored-procedures plsql


【解决方案1】:

您也可以尝试将输入字符串转换为数字,然后捕获潜在的转换错误

Create Or Replace Procedure is_number(p_num varchar2) Is
  v_num Number;
Begin
  v_num := to_number(p_num);
  dbms_output.put_line(v_num);
Exception
  When VALUE_ERROR Then
    dbms_output.put_line(p_num || ' is not a number');
End is_number;

【讨论】:

  • 执行 is_number(1a);错误:-错误报告 - ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误 ORA-06512:在第 1 行...但用户定义的错误消息未出现
  • 尝试:执行is_number('1a');
【解决方案2】:

不太聪明,但会让你入门。

使用正则表达式(REGEXP_LIKE),检查value是否为数字,由

  • 任意位数 [0-9]+
  • 可选 |
  • 后跟一个小数点。 (反斜杠是用来转义的,因为点代表正则表达式中的任何字符)
  • 后跟任意位数 [0-9]+
  • ^ 和 $ 是 锚点 用于输入值的开始和结束(即它必须以数字开头和结尾)

这里是:

SQL> create or replace procedure p_test (par_input in varchar2)
  2  is
  3  begin
  4    if regexp_like(par_input, '^[0-9]+|(\.[0-9]+)$') then
  5       dbms_output.put_line(par_input);
  6    else
  7       dbms_output.put_line('Error');
  8    end if;
  9  end;
 10  /

Procedure created.

SQL> set serveroutput on;
SQL>
SQL> begin
  2    p_test('2');
  3    p_test('2.13');
  4    p_test('x');
  5    p_test('&#');
  6  end;
  7  /
2
2.13
Error
Error

PL/SQL procedure successfully completed.

SQL>

【讨论】:

    【解决方案3】:

    你可以这样做,

    set serveroutput on;
    
    BEGIN
        DBMS_OUTPUT.PUT_LINE('&number'+0);
    EXCEPTION
        WHEN VALUE_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('Error');
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多