执行以下SQL时,在SELECT INTO行上出现ORA-06550错误:
DECLARE
new_type INTEGER;
cur_idCardProfileId DECIMAL;
CURSOR IDCardProfileCursor
IS
SELECT idcardprofileid FROM idcard;
BEGIN
FOR cur_idCardProfileId IN IDCardProfileCursor
LOOP
SELECT cardtype INTO new_type FROM idcardprofile WHERE idcardprofileid = cur_idCardProfileId;
END LOOP;
END;
idcardprofileid(表'idcard')和idcardprofileid(表'idcardprofile')都是DECIMAL类型。
我没有线索了…
您引用的游标行不正确。您的游标行被命名为cur_idCardProfileId
,它优先于您用相同名称声明的DECIMAL
值;
当您引用游标中的值时,您需要使用列名和行变量名。使用较短的名称cur
并使用表别名以避免歧义,您可以这样做:
DECLARE
new_type INTEGER;
CURSOR IDCardProfileCursor
IS
SELECT idcardprofileid FROM idcard;
BEGIN
FOR cur IN IDCardProfileCursor
LOOP
SELECT cardtype INTO new_type
FROM idcardprofile i
WHERE i.idcardprofileid = cur.idcardprofileid;
END LOOP;
END;
/
当然,你通常不会在这样的循环中执行select,你应该让游标连接两个表,因为这样更有效率。
ORA-06550,是在语法不正确的情况下发生的编译错误,通常会在消息中提到行号和错误原因。
回到你的问题:
你的匿名块中有几个语法错误:
)。您不需要声明cur_idCardProfileIdb。)当引用游标集返回的列时,需要使用<loop_variable>.column_name
表示法,因此Select Into
应该具有cur_idCardProfileId.idcardprofileid
在你的代码块中做了修改,修改后的代码块如下:
DECLARE
new_type INTEGER;
-- cur_idCardProfileId DECIMAL;
CURSOR IDCardProfileCursor
IS
SELECT idcardprofileid FROM idcard;
BEGIN
FOR cur_idCardProfileId IN IDCardProfileCursor
LOOP
SELECT cardtype
INTO new_type
FROM idcardprofile
WHERE idcardprofileid = cur_idCardProfileId.idcardprofileid; --Replaced cur_idCardProfileId with cur_idCardProfileId.idcardprofileid
END LOOP;
END;
希望能有所帮助
Vishad