日期:2014-05-17  浏览次数:20763 次

oracle数据类型以及约束
我的需求是:要保存一个密码到数据库,这个密码必须为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是用来实现逻辑的

何苦呢?

何况每次校验都要连接一次数据库,性能也不行啊。
------解决方案--------------------
探讨

没明白楼上的意思,你的意思是在oracle上面不加约束,而是在java加判断性能要好吗?
我倒是觉得在oracle里面加约束性能要好一些,因为在我看来,数据库只有一个,但是java类将会有很多个,假如有很多个JAVA类都要读写这一个表呢?那么我改进一个数据库肯定比改进很多个JAVA类要好要快,至于性能,我现在还真说不明白,毕竟没有实操过
在说了,我不这样做的话,密码就会有数据丢失,必然就会有……

------解决方案--------------------
怕是没有你要求的这个约束哦..
你非不想用JAVA或C实现的话,只能用ORACLE了,可参考以下
SQL code
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;