我有以下代码
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错误类型的参数 请帮忙
答案 0 :(得分:3)
当您使用带有select的for循环时,它会创建一个记录类型。要访问该值,您必须将if更改为:
if (I_email <> em_id.emai_id)
.....
那应该可以解决你的问题。现在,另一方面,使用变量查询where子句会更快(更容易)。 (这样,你就不需要for循环了)。
答案 1 :(得分:0)
我建议您使用游标来读取内容并比较这样的值:
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;