我的需求是:要保存一个密码到数据库,这个密码必须为6位数字。
如果我将number类型当做数据类型的话,假如最前面几位为0的话,直接用number保存,前面几位为0的就会丢失,所以我想用varcher类型保存,但是要加一个约束。也就是说这个约束必须满足下面几个条件:
1,大于0
2,必须为6位
3,必须全部为数字
我不想通过JAVA、C等语言在读取写入的时候去做判断,而是直接通过oracle数据库去完成这一工作,请问应该怎么做呢?
假如我的表是这样的:
表名:use 主键:use_id
use_id use_name password
1 张三 001234
2 李四 022222
------解决方案--------------------
数据库是用来存东西的
java是用来实现逻辑的
何苦呢?
何况每次校验都要连接一次数据库,性能也不行啊。
------解决方案--------------------
个人赞成楼上的,业务逻辑在java/C等宿主语言中实现,这样效率上会好很多,尤其是当操作比较频繁的情形下。
存在多个类写一个表的情形,只能说明LZ的设计存在问题。尤其是象这种简单的应用。
密码会有数据丢失?用varchar2或者char保存,不会丢的。是建议你将密码的校验逻辑放在宿主语言中,没有建议你用number去存密码。
------解决方案--------------------
怕是没有你要求的这个约束哦..
你非不想用JAVA或C实现的话,只能用ORACLE了,可参考以下
CREATE TABLE usermsg(use_id NUMBER(5),use_name VARCHAR2(30),password VARCHAR2(6));
CREATE OR REPLACE PROCEDURE pusermsgins(p_id IN NUMBER,p_name IN VARCHAR2,ppassword IN VARCHAR2) IS
v_password NUMBER;
BEGIN
SELECT To_Number(ppassword) INTO v_password FROM dual;
INSERT INTO usermsg VALUES (p_id,p_name,ppassword);
COMMIT;
EXCEPTION WHEN OTHERS THEN
raise_application_error(-20102,'** plz input the Correct password **'
------解决方案--------------------
sqlerrm);
END;