无法将值分配给主变量,因为它不在范围数据类型中

时间:2015-08-05 10:47:32

标签: stored-procedures db2 runtime local-variables

CREATE PROCEDURE ADMINIST.STUDENT_CUSTOM_PROCEDURE1 (
  IN p_id INTEGER,
  IN p_maths INTEGER, 
  IN p_science INTEGER, 
  Out p_obtain_marks INTEGER, 
  out p_percentage decimal(3,2), 
  out p_status char(4)
)

P1: BEGIN

        DECLARE p_total INTEGER;
        SET p_total = 200;
        SET p_obtain_marks = p_maths + p_science;
        SET p_percentage = ((p_obtain_marks * 100)/p_total);

        IF (p_percentage > 35) THEN
            SET p_status = 'PASS';
        ELSE
            SET p_status = 'FAIL';  
        END IF;

        insert into ADMINIST.STUDENT_RESULT values(p_id, p_maths, p_science, p_obtain_marks, p_percentage, p_status);

END P1

我收到了错误代码:

  

SQLCODE = -304,SQLSTATE = 22003

2 个答案:

答案 0 :(得分:1)

DEC / DECIMAL数据类型与假设的不同。数据类型信息可以在CREATE TABLE下的DB2手册中找到:

“DECIMAL(精度整数,小数位整数)或DEC(精度整数,小数位整数)     对于十进制数。第一个整数是数字的精度;也就是说,总的位数;它的范围可以是1到31.第二个整数是数字的比例;也就是说,小数点右边的位数;它的范围可以从0到数字的精度。     如果未指定precision和scale,则使用默认值5,0。 NUMERIC和NUM这两个词可以用作DECIMAL和DEC的同义词。“

因此,在您的情况下,要保持百分比,请更改变量声明:

  out p_percentage decimal(5,2), 

答案 1 :(得分:0)

我通过将值转换为dacimal来获得此答案。

SET p_percentage = DECIMAL(((p_obtain_marks * 100)/ p_total),3,2);

感谢Henrik Loeser和Alex。