乐观锁与悲观锁
乐观锁与悲观锁 文章转自网上好像是玉米田的,忘记了[@more@]锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机 制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的 “ 锁 ” ,即给我们选定的目标数据上锁,使其无法被其他程序修改。 Hibernate 支持两种锁机制:即通常所说的 “ 悲观锁
oralce动态维护数据库的序列
现在项目里是每一张表对应一个序列,并且有三个库,总是出现序列最大值比数据表主键最大值小,报违反唯一性约束问题,解决的方法是:循环比较每一个表的序列,如果序列值不够大,就调整到表主键最大值加1,适应情况:每一个表对应一个序列而且序列名按规则生成并且表有主键,存储过程如下[@more@]create or replace procedure SYNCSEQ isMAX_ID NUMBER(12);P_SEQ_NUM NUMBER(12);P_TABLE_NAME VARCHAR2(50);P_COLUMN VARCHAR2(50);P_SQL VARCHAR2(500);P_SEQ_SQL VARCHAR2(5000);P_SYN_SQL VARCHAR2(5000);P_COUNT NUMBER(2);--同步seqCUR
Oracle按固定次数递归生成日期
Oracle按固定次数递归生成日期[@more@]select rownum,add_months(add_months(to_date('2010-01-01','yyyy-mm-dd'),-1),rownum) monfrom dual connect by level<MONTHS_BETWEEN(to_date('2012-01','yyyy-mm'),to_date('2010-01','yyyy-mm'))+1
正则表达式元字符
[@more@]1、正则表达式中的元字符元字符 意思 例子 说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配) n 匹配换行符 匹配 ( 匹配 () 匹配 ) ^ 匹配字符串的开头位置 如果A是字符串的第一个字符,^A 匹配 A $ 匹配字符串的末尾位置 如果B是字符串的最后一个字符,$B 匹配 B * 匹配前面的字符0次或多次 ba*rk可以匹配 brk、bark、baark等等 + 匹配前面的字符1次或多次 ba+rk可以匹配 bark、baark等等,但是不能匹配brk,也就是说,最少有以一次。 ? 匹配前面的字符0次或1次 ba?rk可以匹配 bark、brk等等,但是不
Oracle列转行
Oracle列转行数据格式为ID FID1 1,2,32 2,3,4需要转换为ID FID1 11 21 32 22 32 4[@more@]select p.dict_id,p.name_key from base_dict_info p,(select o.dict_id,wm_concat(o.name_key) keys from base_dict_info o group by o.dict_id ) ttwhere tt.dict_id = p.dict_id and regexp_instr(tt.keys,'(^|,)('||p.name_key||'){1}($|,)')>0--测试instr正则表达式select regexp_instr('132,123,234','(^|,)(1232){1}($|,)'
解决0racle11G 导出表的问题 EXP-00011: 不存在 .
解决0racle11G 导出表的问题 EXP-00011: 不存在 .[@more@]导出0racle11G 表时报 EXP-00011: 不存在 错误解决方法: XXX为不存在的表名alter table XXX allocate extent 然后。重新导出
oracle去掉数据里的tab、回车、换行等特殊符号
update bd_prod_cate c set c.cate_name = replace(c.cate_name,chr(9),'')//去掉tab符号的update bd_prod_cate c set c.cate_name = replace(c.cate_name,chr(10),'')//去掉回车符号的update bd_prod_cate c set c.cate_name = trim(c.cate_name)//去掉空格符号的[@more@]
oracle外部表实现大数据量的Excel导入
现在项目里有一个需求:大数据量的excel导入到数据库,利用oracle的外部表实现,实现思路:1.创建一个模板,把excel里的列于业务数据表做一个映射关系2.业务员上传excel,通过java把excel转换为cvs格式的,然后跨服务器上传到oracle数据库所在的服务器下面3.创建oracle外部表,导入数据,再从外部表把数据导入到业务表中以上是思路,待实现完成,再完善此文。[@more@]一、java实现excel转换为cvs参考:http://zhangruihong154.blog.163.com/blog/static/14014292220118505423704/http://www.blogjava.net/jayslong/archive/2011/04/21/con
oracle正则表达式
转载http://space.itpub.net/10768286/viewspace-448847 http://kt8668.iteye.com/blog/122001[@more@]Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式。四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和EGEXP_REPLACE。它们在用法上与 Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 表
关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
转载:http://www.cnblogs.com/flish/archive/2010/05/31/1748221.html[@more@]
64位安装plsql
1.下载32位的oracle客户端2.设置环境变量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBKTNS_ADMIN = D:Program Files (x86)instantclient_10_2[@more@]
Oracle数据链+同义词+访问远程数据库
Oracle数据链+同义词+访问远程数据库[@more@]create public database link kfdb_57 connect to hrcdev1 identified by hrcdev1 using '//192.168.0.57:1521/KFDB'kfdb_57是数据库链的名字,可以随便取'//192.168.0.57:1521/KFDB'是访问远程的数据库的url字符串,如果已经配置了监听,可以使监听的名字(没有试过,因为我从来不配监听)hrcdev1为远程服务器的用户名和密码。创建完之后我们就可以访问了select * from base_function@kfdb_57 --base_function 为远程数据库中的表但是这样看起来不是很简洁,我们再来创建同义词create synonym
Oracle在存储过程中调用其他用户的表授权
Oracle在存储过程中调用其他用户的表授权[@more@]grant select on nip_cwjk.cw_gz_tqf to 目标用户;
Oracle表解锁
Oracle表解锁[@more@]查询被锁的表:select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name,ao.object_name,lo.locked_modefrom v$locked_object lo,dba_objects ao,v$session sesswhere ao.object_id = lo.object_idand lo.session_id = sess.sid;解锁:alter system kill session '179,4276';注意最后面的参数结构为:'sid,serial'如果上面的方法不行,就只能杀操作进程了:查询session对应的进程SELECT sid, username, paddr, status FROM v$session WHERE username = 'JCUSER' and sid=上面查出来的sid;SELECT ADDR,PID,
oracle树形菜单查询
oracle树形菜单查询参考http://space.itpub.net/10159839/viewspace-584603[@more@]select * from(select t.function_id,lpad(t.function_name,length(t.function_name)*2+(level-1)*2,'->'),t.function_name,t.parent_id,t.order_,t.fun_state,t.function_type,level from base_function t START WITH t.function_id in(0) CONNECT BY PRIOR t.function_id=t.parent_idorder siblings by t.order_) ttwhere tt.fun_state=1 and tt.function_type=1
Oracle计算两个日期之间的天数
Oracle计算两个日期之间的天数[@more@]SELECT TRUNC(TO_DATE( '2011-03-01 ', 'YYYY-MM-DD ')-TO_DATE( '2011-01-01 ', 'YYYY-MM-DD ')) FROM DUAL考虑到月大和月小的情况,还有二月的情况
oracle存储过程将参数字符串分割sql
SELECT REGEXP_SUBSTR('1,2', '([^,]+)', 1, ROWNUM) str FROM DUAL CONNECT BY ROWNUM <(LENGTH(REGEXP_REPLACE('1,2', '[^,]', '')) + 2)[@more@]'1,2'是传过来的字符串最后结果为1,2
Oracle索引失效-like
在sql语句中like时需要特别注意,有可能会使索引失效[@more@]测试:建表,然后在测试字段上加索引SELECT * FROM BASE_ROLE eWHERE e.role_name LIKE '%角%' 字段上role_name上有索引,但却走的是全表扫描SELECT * FROM BASE_ROLE eWHERE e.role_name LIKE '角%'这种情况下使用索引SELECT * FROM BASE_ROLE eWHERE e.role_name LIKE '%角'这种情况也不走索引总结:1.尽量不要使用like '%..%',无法优化2.对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index3.对于 like '%...' 的 (不以 % 结尾),可以利用reverse + function
ORACEL的sequence的最大长度
ORACEL的sequence的最大长度为30[@more@]
oracle为数据库每张表建立序列
oracle为数据库每张表建立序列[@more@]create or replace procedure CREATE_SEQ ISv_str VARCHAR2(500);cursor ALLTABLES ISSELECT s.table_name FROM all_tables s WHERE s.owner='TEST' AND (s.table_name LIKE 'BASE_%' OR s.table_name LIKE 'BD_%' OR s.table_name LIKE 'CS_%' OR s.table_name LIKE 'ES_%' OR s.table_name LIKE 'FM_%');beginFOR allTab IN ALLTABLES LOOPEXECUTE IMMEDIATE 'create sequence SEQ_'||allTab.Table_Name||' minvalue 1'||' maxvalue 999999999999999'||' start with 1000'||' increment by 1'||' c