0

I get error ORA-06550 on the SELECT INTO line when executing following SQL:

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;

Both idcardprofileid (table 'idcard') and idcardprofileid (table 'idcardprofile') are of type DECIMAL.

I got no clue anymore... Thank you in advance.

4

2 回答 2

3

您错误地引用了光标行。您的光标行被命名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;
/

当然,您通常不会在这样的循环内进行选择,您可以将光标连接到两个表中,因为这样更有效。

于 2014-06-25T14:45:35.613 回答
1

ORA-06550,是在语法不正确的情况下发生的编译错误,通常在消息中会提到行号和错误原因。

来到你的问题:

您的匿名块中有几个语法错误:

a.) 您不需要声明 cur_idCardProfileId b.) 当您引用游标集返回的列时,您需要使用<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;

希望能帮助到你

维沙德

于 2014-06-25T14:44:44.603 回答