【问题标题】:String Comparision in If condition in PL/SQLPL/SQL中If条件中的字符串比较
【发布时间】:2017-05-02 16:41:30
【问题描述】:

我有以下代码

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 循环,循环具有字段为 emai_id 的表 abc。 Iam 面临错误 PLS=00306 调用“!=”时的参数类型错误 请帮忙

【问题讨论】:

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

标签: for-loop if-statement plsql oracle12c


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我建议您使用游标来读取内容并像这样比较值:

        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;
    

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 2017-11-13
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多