解决方案 »
- 启动数据库时提示 requested INSTANCE_NUMBER is busy
- 求助:PLS-00201:UTL_FILE报错问题???
- oracle V$视图问题
- 问个Oracle 导出的问题
- 用sqlplus建表的时候怎么建立一个有2个字段联合做主键的表?
- insert into 如何一次插入多条记录
- 为什么用select * from test来select会报错?
- 请问如何能定时清空一张表
- 麻烦!!!300分求oracle 8.17版,分不够可以加,只要能找到8.17版!
- plsql导出dmp文件报错
- 唯一键不能产生唯一索引,请大神帮下忙
- primary库上有如下归档信息,目录去哪里查?
insert /*+append*/ into B select ......... from A
还有我看到网上说append配合nologging一起使用比较好,alter table nologging之后插入数据,再执行altere table logging,这样可以吗?有没有什么影响
对备份恢复也会造成影响如果先前delete过,且原来的数据量较大,在用append前,先将空表做个truncate操作降低水位即可,不用重建
A表有detail varchar2字段,B表有detail blob字段,A表的detail列数据里有换行。我直接用insert into B selete V2B(detail) from A,这样B表中的detail列的显示的数据和A表的的detail列一致。但是如果用触发器,即A表插入一条数据后触发添加数据到B表,可是B表得到的数据是没有换行的,这是为什么呢?
可能表述的不太清楚,比如说插入A表数据为
我
爱
你
,然后触发器起作用,B表得到的数据是
我爱你。
数据没有换行,这是为什么啊,有什么办法使得数据一致呢?
下面是varchar2转blob的函数/*---CLOB转换为BLOB---*/
FUNCTION C2B(v_clob IN CLOB DEFAULT EMPTY_CLOB()) RETURN BLOB
AS
res BLOB;
b_len NUMBER := dbms_lob.getlength(v_clob);
dest_offset NUMBER := 1;
src_offset NUMBER := 1;
amount_c INTEGER := DBMS_LOB.lobmaxsize;
blob_csid NUMBER := DBMS_LOB.default_csid;
lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;
warning INTEGER;
BEGIN
IF b_len>0 THEN
DBMS_LOB.createtemporary(res,true);
DBMS_LOB.open(res,DBMS_LOB.lob_readwrite);
DBMS_LOB.convertToBlob(res,v_clob,amount_c,dest_offset,src_offset,blob_csid,lang_ctx,warning);
ELSE
SELECT EMPTY_BLOB() INTO res FROM DUAL;
END IF;
RETURN res;
END;FUNCTION V2B(v_str IN VARCHAR2) RETURN BLOB
AS
V_CLOB CLOB;
V_BLOB BLOB;
BEGIN
IF LENGTH(v_str)>0 THEN
SELECT TO_CLOB(v_str) INTO V_CLOB FROM DUAL;
SELECT C2B(V_CLOB) INTO V_BLOB FROM DUAL;
ELSE
SELECT EMPTY_BLOB() INTO V_BLOB FROM DUAL;
END IF;
RETURN V_BLOB;
END;