我正在创建一个存储过程,根据奖金和工资计算总金额。 存储过程创建如下:
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? 请帮助
答案 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时的明显差异。