Oracle存储过程在添加的时候判断表里有没有相同的id怎么写

会提示num不能作为into的添加目标

create or replace procedure user_add (
resultStr out char,
v_username in CHAR,
v_userid in CHAR,
v_password in CHAR,
v_id_number in VARCHAR2,
v_roleid in CHAR,
num in char
) is
Begin
select userid into num from userinfo where userid!='';
if v_userid = num then
insert into userinfo(username,userid,password,id_number) values(v_username,v_userid,v_password,v_id_number);
insert into user_role(userid,roleid) values(v_userid,v_roleid);
ResultStr := 'success: 添加成功!';
else
ResultStr := 'success: 用户名已存在!';
end if;
End;

报错的原因是因为你的 num 参数 是个 "in" 的,只能由外部传入,不能赋值,除非设置成 "in out"
另外,就算你设置成了in out ,它还是会报错,报查到了多行数据 ,因为 你的where 条件是 userid!='',多行记录是不能塞到一个char类型里的字段里去的,
而且,假设你表里没有记录,它也会直接报错nodatafound。
你如果是想校验传入的v_userid 是否已存在,建议改成这样

create or replace procedure user_add(resultStr   out char,
                                     v_username  in CHAR,
                                     v_userid    in CHAR,
                                     v_password  in CHAR,
                                     v_id_number in VARCHAR2,
                                     v_roleid    in CHAR) is
  num number;
Begin
  select count(1) into num from userinfo where userid = v_userid;
  if num = 0 then
    insert into userinfo
      (username, userid, password, id_number)
    values
      (v_username, v_userid, v_password, v_id_number);
    insert into user_role (userid, roleid) values (v_userid, v_roleid);
    ResultStr := 'success: 添加成功!';
  else
    ResultStr := 'success: 用户名已存在!';
  end if;
End;