当前位置: 代码迷 >> Oracle管理 >> 【Oracle】存储过程,不等于查询失败 WHERE ID<>vID解决方法
详细解决方案
【Oracle】存储过程,不等于查询失败 WHERE ID<>vID解决方法
热度:147 发布时间:2016-04-24 04:16:06.0
【Oracle】存储过程,不等于查询失败 WHERE ID<>vID 环境:Oracle 11g 64位 win
SQL
create or replace procedure PR_USER_MODIFY ( vUserId in TB_USER.UserId%TYPE default 0,
vName in TB_USER.name%type, vEmail in TB_USER.Email%type, oResInt out int, oResStr out varchar2 ) is
i int; newUserId int;
begin
select count(1) into i from TB_USER WHERE UserId <> vUserId --这里会导致错误,因为vUserId可能是数字也可能是空 AND (upper(Name) = upper(vName) or upper(Email) = upper(vEmail));
IF i > 0 THEN oResInt := 0; oResStr := '[用户名]或者 [邮箱]已经被占用了'; return; end if;
if vUserId THEN update TB_USER SET Name = vName, Email = vEmail where UserId = vUserId; commit; oResStr := '更新成功'; else
SELECT MAX(UserId) + 1 INTO newUserId FROM TB_USER;
INSERT INTO TB_USER (UserId, Email, Name) values (newUserId, vEmail, vName); commit; oResStr := '插入成功'; end if;
oResInt := 1;
exception when others then oResInt := 0; oResStr := '发生异常,请联系DBA';
end PR_USER_MODIFY;
疑问 1)无法查询到应该的数据
select count(1) into i from tb_user where userid<>vUserId and (upper(email) = upper(vEmail) or upper(name)=upper(vName))