【发布时间】:2021-07-10 10:26:30
【问题描述】:
我在 SQL 中使用此代码
--#SET TERMINATOR @
CREATE PROCEDURE UPDATE_LEADERS_SCORE (
IN in_School_ID INTEGER, in_Leader_Score INTEGER)
LANGUAGE SQL
MODIFIES SQL DATA
BEGIN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Score" = in_Leader_Score
WHERE "School_ID" = in_School_ID;
IF 'in_Leaders_Score' >= '80' THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Very_Strong'
WHERE "School_ID" = in_School_ID;
ELSEIF 'in_Leaders_Score' >= '60' and 'in_Leaders_Score' <= '79' THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Strong'
WHERE "School_ID" = in_School_ID;
ELSEIF 'in_Leaders_Score' >= '40' and 'in_Leaders_Score' <= '59' THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Average'
WHERE "School_ID" = in_School_ID;
ELSEIF 'in_Leaders_Score' >= '20' and 'in_Leaders_Score' <= '39' THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Weak'
WHERE "School_ID" = in_School_ID;
ELSE
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Very Weak'
WHERE "School_ID" = in_School_ID;
END IF;
END
@
但是当调用过程并在第二个参数中输入任何值时,更新的行只在Leaders Icon列中返回字符串“Very_Strong”,可以给我提示吗?
我已经尝试在这种模式下进行比较 =>80 放我得到了这个错误:
状态: 失败的 错误信息 在函数“DECFLOAT”的字符串参数中发现无效字符.. SQLCODE=-420, SQLSTATE=22018, DRIVER=4.26.14
我尝试将“in_Leaders_Score”用单引号括起来,但没有出现错误,但代码没有进行正确的比较,如果我将此变量放在双引号或不带引号中,则会出现此错误: 错误信息: “LEADERS_SCORE”在使用它的上下文中无效.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.26.14
【问题讨论】:
-
您的 if 语句比较的是文字字符串,而不是变量与数字。
-
请用您正在使用的 DBMS 标记您的问题。但是, in_Leader_Score 被定义为一个整数,但在您的代码中您将其视为一个字符串 - 因此您的比较代码不会以您想要的方式工作。 >= 80 和 >= '80' 不一样
-
当我尝试以这种方式进行比较时:>=80,当我尝试调用该函数时收到此错误:状态:失败错误消息在字符串参数中找到无效字符函数“DECFLOAT”.. SQLCODE=-420, SQLSTATE=22018, DRIVER=4.26.14
-
我的男孩和女孩是一个注意错误,我的变量输入错误,我将变量定义为 in_Leader_Score,并且在 IF-ELSE 语句中我输入了_Leaders_Score,因此更正此我删除了所有引号IF-ELSE 比较,代码运行良好!非常感谢!!!
标签: sql if-statement stored-procedures db2