For loop PL/SQL中If条件下的字符串比较

For loop PL/SQL中If条件下的字符串比较,for-loop,if-statement,plsql,oracle12c,For Loop,If Statement,Plsql,Oracle12c,我有以下代码 create or replace procedure deact_user (i_email in varchar2) as var1 varchar2(200); begin for em_id in (select abc.emai_id from abc) loop if (i_email <> em_id) then dbms_output.put_line('Not working'); else dbm

我有以下代码

create or replace procedure deact_user (i_email in varchar2)
as
  var1 varchar2(200);

begin
  for em_id in (select abc.emai_id from abc)
  loop
    if (i_email <> em_id) then
      dbms_output.put_line('Not working');
    else
      dbms_output.put_line('Working');
    end if;
  end loop;
end;
我需要将输入参数I_email与em_id进行比较,em_id是一个for循环,它循环表abc的字段作为emai_id。 Iam面临错误PLS=00306调用“!=”时参数类型错误
请帮助

当您将for循环与select一起使用时,它将创建一个记录类型。要访问该值,您必须将if更改为:

if (I_email <> em_id.emai_id) 
.....

那应该能解决你的问题。另一方面,使用您的变量使用where子句进行查询会更快更容易。这样,就不需要for循环了

我建议您使用游标读取内容,并比较如下值:

    create or replace procedure deact_user (i_email in varchar2)
as
  var_id varchar2(200);

 cursor cur_em_id is select abc.emai_id from abc;

    begin
      open cur_em_id;
      loop
       fetch cur_em_id into var_id;
       exit when cur_em_id%NOTFOUND;
        if (i_email <> var_id) then
          dbms_output.put_line('Not working');
        else
          dbms_output.put_line('Working');
        end if;
      end loop;
    close cur_em_id;
    end;

顺便说一句,if条件周围不需要括号。