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
答案 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。