甲骨文:ORA-06550 "Select into"错误



执行以下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

相关内容

  • 没有找到相关文章

最新更新