oracle数据库分页是什么,Oracle数据库分页(1)

Oracle数据库分页(一)

准备工作

1.设置时间显示样式

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

2.创建表(T_USERS)

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'))

);

3.创建序列,实现主键自增

drop sequence T_USERS_SEQ;

CREATE sequence T_USERS_SEQ

start with 1

increment by 1

nomaxvalue

nominvalue

nocache

;

4.创建触发器,每次添加数据时主键自增

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;

/

5.创建函数来加密密码

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;

/

6.创建存储过程来插入测试数据

CREATE or REPLACE procedure T_USERS_PROC (

loginin T_USERS.hs_login%type,

nick_namein T_USERS.hs_nick_name%type,

creatorinT_USERS.hs_creator%type,

modifiderinT_USERS.hs_modifider%type,

passwordinT_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;

/

7.通过PL/SQL块来调用存储过程

/**

-- 可以接受外部输入,当调用存储过程时将其作为参数传入

accept loginprompt"请输入登录名:"

accept nick_nameprompt"请输入昵称:"

accept creatorprompt"请输入创建者:"

accept modifiderprompt"请输入修改者:"

accept passwordprompt"请输入密码:"

*/

declare

/**

-- 获取接收的参数的值

hs_loginT_USERS.hs_login%type := '&login';

hs_nick_nameT_USERS.hs_nick_name%type := '&nick_name';

hs_creatorT_USERS.hs_creator%type := '&creator';

hs_modifiderT_USERS.hs_modifider%type := '&modifider';

hs_passwordT_USERS.hs_password%type := '&password';

*/

begin

-- 我这里用来测试,给予了特定的值

T_USERS_PROC('admin', 'Lcr Admin', 'luchunli', 'cr', 'luchunli');

commit;

end ;

/

总结:

1.在创建触发器和函数时提示"created with compilation errors",使用"show errors;"查看详细错误信息。

2.RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

3.Oracle中获得随机数.select dbms_random.value from dual;可以获取0到1之间的随机数;select round(dbms_random.value,3) from dual;保留小数位数为3位的随机数;select floor(dbms_random.value(30,50)) from dual;这样就可以取得到30到50之间的随机整数。

4.Oracle中RAW和Varchar2常用的两个转换函数

1). UTL_RAW.CAST_TO_RAW  该函数按照缺省字符集(一般为GB2312),将VARCHAR2字符串转换为RAW。

2). UTL_RAW.CAST_TO_VARCHAR2 该函数按照缺省字符集合(一般为GB2312),将RAW转换为VARCHAR2。

当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中.

5.存储过程中指定参数有时用这个符号=>,DBMS_OBFUSCATION_TOOLKIT.MD5(input => raw_pwd, checksum => encode_pwd);这里raw_pwd就是传入的参数,而encode_pwd是加密后的数据.

6.DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW类型.

<>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值