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


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

I got Error code:

SQLCODE = -304, SQLSTATE = 22003

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

下找到。

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

所以在你的例子中,要保存百分比,改变变量声明:

  out p_percentage decimal(5,2), 

我通过将value转换为十进制得到了这个答案。

设置p_percentage =小数(((p_obtain_marks * 100)/p_total), 3、2),

感谢Henrik Loeser和Alex。

相关内容

最新更新