我在 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
@
但是当a调用该过程并在第二个参数中设置任何值时,更新的行只返回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
答案 0 :(得分:0)
现在是正确的代码:
{{1}}
Tks 给 insigths 人
答案 1 :(得分:0)
我不建议你以后做这样的事情。
整个逻辑可以只用一条语句来实现,这样可读性更强。
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET
"Leaders_Score" = in_Leader_Score
, "Leaders_Icon" =
CASE
WHEN in_Leader_Score >= 80
THEN 'Very_Strong'
WHEN in_Leader_Score >= 60 and in_Leader_Score <= 79
THEN 'Strong'
WHEN in_Leader_Score >= 40 and in_Leader_Score <= 59
THEN 'Average'
WHEN in_Leader_Score >= 20 and in_Leader_Score <= 39
THEN 'Weak'
ELSE 'Very Weak'
END
WHERE "School_ID" = in_School_ID;