Oracle实现用户注册校验–两种方法
方法一:
当数据过多的时候会影响到数据库的性能,因为用select * from table,也可以指定需要验证的字段优化也可以 比如只需要验证 username 和 password 就使用 select username,password from table。
代码如图。
Packages代码
CREATE OR REPLACE PACKAGE TEST_LLP_PKG IS
-- P_PHONE 传入参数(IN)
-- P_USERNAME 传入参数(IN)
-- X_RETURN_MSG 传出参数(OUT)
-- VARCHAR2 为数据类型
PROCEDURE TEST_LLP_THREE(P_PHONE IN VARCHAR2,
P_USERNAME IN VARCHAR2,
X_RETURN_MSG OUT VARCHAR2);
END TEST_LLP_PKG;
Package bodies 代码
CREATE OR REPLACE PACKAGE BODY TEST_LLP_PKG IS
-- 加了个 IS
PROCEDURE TEST_LLP_THREE(P_PHONE IN VARCHAR2,
P_USERNAME IN VARCHAR2,
X_RETURN_MSG OUT VARCHAR2) IS
/*使用 for 循环 循环这个表的数据*/
FOR T_TUP IN (SELECT * FROM TEST_USER_PHONE)
LOOP
-- 表数据.字段 与传入的数据进行判断即可
IF P_PHONE IS NULL AND T_TUP.USERNAME=P_USERNAME THEN
X_RETURN_MSG := '用户名已存在';
END IF;
IF P_PHONE != T_TUP.PHONE AND P_USERNAME IS NULL THEN
X_RETURN_MSG := '手机号可以使用';
END IF;
IF P_PHONE = T_TUP.PHONE AND T_TUP.USERNAME !=P_USERNAME THEN
X_RETURN_MSG := '手机号存在,用户名不存在';
END IF;
END LOOP;
END TEST_LLP_THREE;
END TEST_LLP_PKG;
方法二:也是企业级方法
Packages代码
CREATE OR REPLACE PACKAGE TEST_LLP_PKG IS
-- P_PHONE 传入参数(IN)
-- P_USERNAME 传入参数(IN)
-- X_RETURN_MSG 传出参数(OUT)
-- VARCHAR2 为数据类型
PROCEDURE TEST_LLP_THREE(P_PHONE IN VARCHAR2,
P_USERNAME IN VARCHAR2,
X_RETURN_MSG OUT VARCHAR2);
END TEST_LLP_PKG;
Package bodies 代码
CREATE OR REPLACE PACKAGE BODY TEST_LLP_PKG IS
-- 加了个 IS
PROCEDURE TEST_LLP_THREE(P_PHONE IN VARCHAR2,
P_USERNAME IN VARCHAR2,
X_RETURN_MSG OUT VARCHAR2) IS
COUNT_EXIST_PHONE NUMBER := 0;
COUNT_EXIST_SELF NUMBER := 0;
EMP_NAME VARCHAR2(100) := '';
BEGIN
IF P_PHONE IS NULL OR P_USERNAME IS NULL THEN
X_RETURN_MSG :='params is not null';
END IF;
-- 判断手机号是否已存在
SELECT COUNT(1) INTO COUNT_EXIST_PHONE FROM TEST_USER_PHONE T WHERE T.PHONE = P_PHONE;
-- 判断是否自身拥有
SELECT COUNT(1)
INTO COUNT_EXIST_SELF
FROM TEST_USER_PHONE TT
WHERE TT.USERNAME = P_USERNAME AND TT.PHONE = P_PHONE;
IF COUNT_EXIST_SELF > 0 THEN
X_RETURN_MSG := '是您自己的';
ELSE
IF COUNT_EXIST_PHONE > 0 THEN
X_RETURN_MSG := '已被占用';
ELSE
X_RETURN_MSG := '可以使用';
END IF;
END IF;
END TEST_LLP_THREE;
END TEST_LLP_PKG;