PL/SQL 中 If 条件中的字符串比较
String Comparision in If condition in PL/SQL
我有以下代码
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 进行比较,后者是一个 for 循环,循环 table abc 的字段为 emai_id。
我面临错误 PLS=00306 调用 '!=' 时参数类型错误
请帮助
当您将 for 循环与 select 一起使用时,它会创建一个记录类型。要访问该值,您必须将 if 更改为:
if (I_email <> em_id.emai_id)
.....
这应该可以解决您的问题。现在,另一方面,仅使用变量使用 where 子句进行查询会更快(也更容易)。 (这样,您就不需要 for 循环)。
我建议您使用 Cursors 读取内容并比较值,如下所示:
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;
我有以下代码
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 进行比较,后者是一个 for 循环,循环 table abc 的字段为 emai_id。 我面临错误 PLS=00306 调用 '!=' 时参数类型错误 请帮助
当您将 for 循环与 select 一起使用时,它会创建一个记录类型。要访问该值,您必须将 if 更改为:
if (I_email <> em_id.emai_id)
.....
这应该可以解决您的问题。现在,另一方面,仅使用变量使用 where 子句进行查询会更快(也更容易)。 (这样,您就不需要 for 循环)。
我建议您使用 Cursors 读取内容并比较值,如下所示:
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;