当前位置: 数据库>其它
本页文章导读:
▪更新blob字段的存储过程 CREATE OR REPLACE PROCEDURE INVHL_UPDATE_BLOB_DATA(p_table_name IN VARCHAR2,--表名
p_blob_field_name IN VARCHAR2,--blob列名
p_where_condition IN VARCHAR2,--主键
.........
▪MySQLReport分析报告三 mysqlreport官方手册:http://hackmysql.com/mysqlreportguide
__ InnoDB Buffer Pool __________________________________________________
Usage 1.00G of 1.00G %Used: 100.00
Read hit 99.97%
Pages
Free 0 %Total.........
▪DB2中的序列 1、创建方法与oracle相同:
CREATE SEQUENCE "KGL"."rbc_repid" AS BIGINT
MINVALUE 1 MAXVALUE 999999999999999999
START WITH 1 INCREMENT BY 1
CACHE 20 CYCLE NO ORDER;
2、数据库中加值:
insert into kgl.rep_bcard_c.........
[1]更新blob字段的存储过程
来源: 互联网 发布时间: 2013-11-07
CREATE OR REPLACE PROCEDURE INVHL_UPDATE_BLOB_DATA(p_table_name IN VARCHAR2,--表名 p_blob_field_name IN VARCHAR2,--blob列名 p_where_condition IN VARCHAR2,--主键 p_id IN VARCHAR2,--id p_blob_data IN blob)--数据 /*表名table_name, clob字段名field_name 确定要更新唯一记录的where条件p_where_condition 传入的字符串变量P_clob_data*/ IS v_lobloc BLOB;--目标blob字段 v_blob_data blob;--作为接收参数的字段,参数变量不能直接拿来赋值 v_amount BINARY_INTEGER;--总长度 v_query_string VARCHAR2(1000);--sql语句 v_sub_length binary_integer;--一次读取的最大长度,不超过32766 v_sub_blob blob;--一次读取的子串 offset binary_integer;--游标 BEGIN v_amount := LENGTH(p_blob_data); v_blob_data := p_blob_data; v_sub_length := 32766; offset :=1; v_query_string := 'SELECT ' || p_blob_field_name || ' FROM ' || p_table_name || ' WHERE ' || p_where_condition ||'='||p_id|| ' FOR UPDATE'; dbms_output.put_line(v_query_string); --initialize buffer with data to be inserted or updated EXECUTE IMMEDIATE v_query_string--执行sql语句,将目标字段锁住,并且将目标字段赋值给v_lobloc,以待后续的操作 INTO v_lobloc; --from pos position, write 32766 varchar2 into lobloc if v_amount > v_sub_length then while offset < v_amount loop --当游标小于最大值时,继续循环 DBMS_LOB.read(p_blob_data, v_sub_length, offset,v_sub_blob);--把读到的内容放到v_sub_blob中 DBMS_LOB.writeappend(v_lobloc, length(v_sub_blob), v_sub_blob);--写入v_lobloc,该变量已经在之前和sql语句绑定 offset:=length(v_sub_blob)+offset;--游标移动 end loop; else DBMS_LOB.writeappend(v_lobloc, v_amount, v_blob_data);--若是小于32766直接写入 end if; commit; EXCEPTION WHEN OTHERS THEN ROLLBACK; END;
以上就是通用版的存储过程,根据表名、blob字段名、主键名称、当前id,源数据就可以实现将源数据存入目标字段的功能。需要注意以下几点:
1,源数据必须也是blob类型的,如果你需要将其他类型比如是varchar2存入,那么就把参数改了,过程之中也要做相应的更改,主要是类型。
2,DBMS_LOB.writeappend这个方法是用来追加的方法,也就是不会清空目标字段,而是直接把源数据追加到目标字段的末尾。如果是要覆盖之前的数据,就要在执行该过程之前进行一次update操作,如:
update jforum_posts_text pt set pt.post_text = EMPTY_BLOB() where pt.post_id = 8817;也就是把一个空数据插入到目标字段中,这样就实现了清空目标字段,然后在执行该过程,就实现了覆盖的功能。注意一点,执行update语句时别忘了where子句,否则所有的记录都被清空了。
经过半下午的摸索,这个过程才基本可以满足要求,欢迎大家伙给予指教,能多多改进该过程,使其更具灵活性。
作者:xinfei0803 发表于2013-3-11 17:11:07 原文链接
阅读:51 评论:0 查看评论
[2]MySQLReport分析报告三
来源: 互联网 发布时间: 2013-11-07
mysqlreport官方手册:http://hackmysql.com/mysqlreportguide
__ InnoDB Buffer Pool __________________________________________________ Usage 1.00G of 1.00G %Used: 100.00 Read hit 99.97% Pages Free 0 %Total: 0.00 Data 63.13k 96.34 %Drty: 0.00 Misc 2401 3.66 Latched 0.00 Reads 205.21M 7.6k/s From file 65.92k 2.4/s 0.03 Ahead Rnd 0/s Ahead Sql 0/s Writes 516.01k 19.0/s Flushes 102.36k 3.8/s Wait Free 0 0/s
Usage 1.00G of 1.00G %Used: 100.00
mysql innodb 的缓存统计信息.
Usage 表示, 总的缓存中, 当前已占用1G, 使用率达100.00%. 这种情况需要曾哥缓存。很大的瓶颈。
Read hit 表示缓存命中率 99.97%, 这个数值是比较理想的, 一般情况下, 都应该大于
99.98%.
作者:k_scott 发表于2013-3-11 17:06:43 原文链接
阅读:50 评论:0 查看评论
[3]DB2中的序列
来源: 互联网 发布时间: 2013-11-07
1、创建方法与oracle相同:
CREATE SEQUENCE "KGL"."rbc_repid" AS BIGINT
MINVALUE 1 MAXVALUE 999999999999999999
START WITH 1 INCREMENT BY 1
CACHE 20 CYCLE NO ORDER;
2、数据库中加值:
insert into kgl.rep_bcard_comsume(repid,purse_cardid) values(nextval for kgl.rbc_repid,'123')
使用方式为:nextval for kgl.rbc_repid
CREATE SEQUENCE "KGL"."rbc_repid" AS BIGINT
MINVALUE 1 MAXVALUE 999999999999999999
START WITH 1 INCREMENT BY 1
CACHE 20 CYCLE NO ORDER;
2、数据库中加值:
insert into kgl.rep_bcard_comsume(repid,purse_cardid) values(nextval for kgl.rbc_repid,'123')
使用方式为:nextval for kgl.rbc_repid
作者:milife2012 发表于2013-3-11 16:58:34 原文链接
阅读:52 评论:0 查看评论
最新技术文章: