pl / sql中的数字到字符隐式转换

时间:2015-11-13 19:00:52

标签: sql plsql

我正在创建一个存储过程,根据奖金和工资计算总金额。 存储过程创建如下:

        Create or replace procedure cal_sum( p_salary in number, p_bonus inout number, p_output out number)
         Begin
         p_bonus :=p_salary*bonus/100;
         p_output :=p_bonus+p_salary;
         End;

使用匿名块调用存储过程,如下所示:

          Declare
          v_salary number := 2000;
          v_bonus number  := 10;
          v_total char(10);
          Begin
          cal_sum(v_salary,v_bonus,v_total);
           End;

以上程序运行正常,没有编译时错误。 我在上面的查询中理解的是,即使存储过程和匿名块中的p_output和v_total参数的数据类型不同,查询也是如何工作的 pl / sql是否支持将数字隐式转换为char? 请帮助

1 个答案:

答案 0 :(得分:0)

回答你的简单问题。以下示例说明了您的困境:)

    SQL> SET SERVEROUTPUT ON;
    SQL> DECLARE
      2  lv_number NUMBER:='12345';
      3  BEGIN
      4  dbms_output.put_line(lv_number);
      5  END;
      6  /
    12345

即使vv_number属于NUMBER数据类型,但我仍然在''中指定了该数据类型。 因此Oracle运行其智能:P即自己的转换。但是如果你尝试下面的例子也一样

SQL> ed
Wrote file afiedt.buf
SQL> DECLARE
  2  lv_number NUMBER:='12345a';
  3  BEGIN
  4  dbms_output.put_line(lv_number);
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 2

现在,您可以看到将12345a转换为NUMBER时的明显差异。