日期:2014-05-16 浏览次数:20498 次
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
drop table T_USERS; CREATE table T_USERS ( hs_uuid number(20) primary key, hs_login varchar(50) not null unique, hs_nick_name varchar(200), hs_creator varchar(50) default 'luchunli', hs_created_time Date, hs_modifider varchar(50) default 'luchunli', hs_sex varchar(10), hs_password varchar(50), constraint T_USERS_CHECK_CONS check(hs_sex in ('male', 'female')) );
drop sequence T_USERS_SEQ; CREATE sequence T_USERS_SEQ start with 1 increment by 1 nomaxvalue nominvalue nocache ;
CREATE or REPLACE trigger T_USERS_TR before insert on T_USERS for each row begin SELECT T_USERS_SEQ.nextval into :new.hs_uuid from dual; end; /
CREATE or REPLACE function T_USERS_ENCODE_PWD ( str_pwd in varchar ) return VARCHAR as raw_pwd RAW(128); encode_pwd RAW(128); begin raw_pwd := UTL_RAW.cast_to_raw(str_pwd); DBMS_OBFUSCATION_TOOLKIT.MD5(input => raw_pwd, checksum => encode_pwd); return LOWER(RAWTOHEX(encode_pwd)); end T_USERS_ENCODE_PWD; /
SQL> select T_USERS_ENCODE_PWD('luchunli') from dual; -- 直接通过SELECT测试 T_USERS_ENCODE_PWD('LUCHUNLI') ------------------------------------------------------ edd2c9015c11a0cf2df6a1b5681a374a -- 通过PL/SQL块测试 set serveroutput on DECLARE v_input_pwd VARCHAR2(100):= 'luchunli'; v_pwd VARCHAR2(100); BEGIN v_pwd := T_USERS_ENCODE_PWD(v_input_pwd); DBMS_OUTPUT.put_line(v_pwd); END; /
CREATE or REPLACE procedure T_USERS_PROC ( login in T_USERS.hs_login%type, nick_name in T_USERS.hs_nick_name%type, creator in T_USERS.hs_creator%type, modifider in T_USERS.hs_modifider%type, password in T_USERS.hs_password%type ) as t_start number := 1; t_total number := 1000; t_sex varchar(10) := 'male'; hs_encode_pwd varchar(50); -- temp number := 0; begin hs_encode_pwd := T_USERS_ENCODE_PWD(password); DBMS_OUTPUT.put_line('原来密码:'||password||',加密后的密码:'||hs_encode_pwd); while t_start < t_total loop /** -- 不明白的地方 select floor(dbms_random.value(1,10)) into temp from dual; if (temp mod 2) = 0 then t_sex := 'male'; else t_sex := 'famale'; end if; */ INSERT INTO t_users(hs_login, hs_nick_name, hs_creator, hs_created_time, hs_modifider, hs_sex, hs_password) values (login||t_start, nick_name, creator, to_date('2011-10-11', 'yyyy-mm-dd'), modifider, 'male', hs_encode_pwd); -- 在上面的插入语句中,如果将'male'替换成我上面计算出来的t_sex将报错check constraint (SYSTEM.T_USERS_CHECK_CONS) violated t_start := t_start + 1; end loop; end T_USERS_PROC; /
/** -- 可以接受外部输入,当调用存储过程时将其作为参数传入 accept login pro