更新时间: 2017-07-12
1. clob字段值读取时,借用extractvalue或extract函数读取节点时,oracle报数据类型不一致异常
解决思路: 数据类型问题,猜测1.可能是获取的节点值与所需值类型发生冲突,查看sql,发现实际上并无关联,如果能查询出节点值,必然为字符串类型,不存在冲突,猜测2.可能是空值问题,extractvalue函数不存在空值报错问题,猜测3: 可能clob类型不支持extractvalue函数,因为oracle还有另一个字段同样也是存xml字符串的---SYS.XMLTYPE类型
解决方案: 如果xml字段为clob类型,则将xml字段转成SYS.XMLTYPE类型,即xmltype(xml),如果是SYS.XMLTYPE类型直接用该函数即可
oracle 工作笔记,不定期更新
标签:查看 http 字段 style 支持 logs log 技术 ges
小编还为您整理了以下内容,可能对您也有帮助:
oracle 如何取表中所有数据的20%
select t.*,t.rid from (select * ,rownum as rid from table) t
where rid<= (select round(count(*)*0.2) as count from table);
Oracle数据库触发器更新数据
oracle触发器将数据插入到另一个服务器的oracle数据库中要用dblink实现两台服务器的数据共享。
oracle db_link 和触发器实现不同数据库表的同步
---创建dblink,dblink_test名称,(被同步数据库的a_test)ST10766用户名,ep密码,ass100连接字符串
create public database link dblink_test
connect to ST10766 identified by ep
using 'ass100';
---删除dblink
----drop public database link dblink_test;
----建立表
create table a_test (id int,name varchar(20),pass varchar(20))
select * from a_test;
insert into a_test (id,name,pass) values (1,'zzn','shanshan')
insert into b_test (id,username,password) values('1','zxl','xiaolan')
----在目的数据库上,测试dblink,查询的是源数据库的表
select * from a_test@dblink_orc10;
select * from a_test;
----创建触发器
create or replace trigger a_b_test
after insert or update or delete
on a_test
for each row
begin
if deleting then
delete from b_test where id=:old.id;
end if;
if inserting then
insert into b_test(id,username,password) //b_test表的字段
values(:new.id,:new.name,:new.pass); //a_test表的字段
end if;
if updating then
update b_test set username=:new.name,password=:new.pass where id=:old.id;
end if;
end a_b_test;
Oracle数据库触发器更新数据
oracle触发器将数据插入到另一个服务器的oracle数据库中要用dblink实现两台服务器的数据共享。
oracle db_link 和触发器实现不同数据库表的同步
---创建dblink,dblink_test名称,(被同步数据库的a_test)ST10766用户名,ep密码,ass100连接字符串
create public database link dblink_test
connect to ST10766 identified by ep
using 'ass100';
---删除dblink
----drop public database link dblink_test;
----建立表
create table a_test (id int,name varchar(20),pass varchar(20))
select * from a_test;
insert into a_test (id,name,pass) values (1,'zzn','shanshan')
insert into b_test (id,username,password) values('1','zxl','xiaolan')
----在目的数据库上,测试dblink,查询的是源数据库的表
select * from a_test@dblink_orc10;
select * from a_test;
----创建触发器
create or replace trigger a_b_test
after insert or update or delete
on a_test
for each row
begin
if deleting then
delete from b_test where id=:old.id;
end if;
if inserting then
insert into b_test(id,username,password) //b_test表的字段
values(:new.id,:new.name,:new.pass); //a_test表的字段
end if;
if updating then
update b_test set username=:new.name,password=:new.pass where id=:old.id;
end if;
end a_b_test;
oracle 中分类和更新
create or replace procere p_test is
i_sum number(8);
begin
select count(*) into i_sum from cus;
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '111' where t.FCC_EVA_TOTAL >= ceil(i_sum*0.8);
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '112' where t.FCC_EVA_TOTAL <= floor(i_sum*0.8) and t.FCC_EVA_TOTAL >= ceil(i_sum*0.2);
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '113' where t.FCC_EVA_TOTAL <= floor(i_sum*0.2);
commit;
end p_test;
oracle 中分类和更新
create or replace procere p_test is
i_sum number(8);
begin
select count(*) into i_sum from cus;
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '111' where t.FCC_EVA_TOTAL >= ceil(i_sum*0.8);
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '112' where t.FCC_EVA_TOTAL <= floor(i_sum*0.8) and t.FCC_EVA_TOTAL >= ceil(i_sum*0.2);
update (select * from cus order by FCC_EVA_TOTAL desc) t set t.FCC_CUST_CLASSFIED_ID = '113' where t.FCC_EVA_TOTAL <= floor(i_sum*0.2);
commit;
end p_test;
高分求助:oracle 大表更新,大约200万,insert和update太慢,如何解决?
简单的看看搂主的描述 "需要从B表中一条一条去A表中核实"
我估计是用 游标来处理的。
如果用游标一行一行 FETCH , 性能可能要打点折扣。
这种情况下,可以尝试使用 BULK COLLECT 来批量加载。
下面是 Oracle 游标处理II - 使用BULK COLLECT 的例子。
http://hi.baidu.com/wangqing999/blog/item/2ea041cc0d4606037e3e6f20.html
又看了一下逻辑, 要是存在的话,更新,没有的话就插入。
如果没有其他的复杂的逻辑的话,那么用 MERGE 语句,可以直接处理掉。
下面是 MERGE 的例子
http://hi.baidu.com/wangqing999/blog/item/2879207af3e388370cd7da86.html
Oracle一次更新多条记录
可以通过update方法进行批量修改。
sql:update table_name SET age=25;
备注:也可以添加必要的条件,针对固定条件的数据进行批量修改。
sql:update table_name SET age=age+1 where name ='zhangsan ';