【发布时间】:2015-12-24 15:39:00
【问题描述】:
我正在尝试从 sql server 上的 varchar2(8000) 文本字段插入数据。我在 oracle db 上创建了一个类似的列,但属于 clob 数据类型。你能帮我解决不一致的数据类型问题并提高查询的性能吗? 请让我知道是否有任何其他更好的方法可以为多行插入巨大的文本文件。当我在 sql server 和 oracle db 上运行相同的查询(即从 TBL_NOTES@PPRLEG 中选择“Note”)时,可以快速检索结果。当我尝试插入数据时,它需要很长时间并且不会结束。我应该只在此处给出包含 clob 的列,其余的应该由它处理。
CREATE OR REPLACE FUNCTION get_clob_data
(id in TBL_NOTES.id%TYPE,
REPORT_ID in TBL_NOTES.REPORT_ID%type,
UNIQUE_ID in TBL_NOTES.UNIQUE_ID%type,
USER_ID in TBL_NOTES.USER_ID%type,
DTS in TBL_NOTES.USERROLE%type,
USEREIN in TBL_NOTES.USERROLE%type
)
RETURN varchar2
IS
l_text varchar2(4000);
Type t_note_txt IS TABLE OF TBL_NOTES.NOTE%type;
v_notes t_note_txt;
BEGIN
SELECT ltrim(rtrim("NOTE"))NOTE
bulk collect into v_notes
FROM TBL_NOTES@PPRLEG;
for indx in 1..v_notes.count
loop
l_text := l_text || ' ' ||v_notes(indx);
end loop;
RETURN l_text;
END;
/
【问题讨论】:
-
afaik sql server 没有 varchar2 数据类型。你为什么在这里使用一个函数?此功能如何工作,您将输出限制为 4000 个字符,但选择了整个远程表?如果您提供更多详细信息,会更容易提供帮助。远程表的定义、行数、您要完成的任务。
-
我们正在尝试将 sql server 数据 2008 R2 迁移到 Oracle 11 g 数据库。我们正在尝试使用 dblink 插入行(count-379012),但在 sql server 中包含大文本的字段,它有性能问题。我们为一个这样的表 (TBL_NOTES) 创建了 CLOB 数据类型,我们正在尝试在这里执行批量收集操作。sql server 上的字段“Note”是文本数据类型,Oracle 端的字段是 CLOB 数据类型。I我对这次迁移非常陌生,因此正在寻找解决此问题的方法。请注意,我们有非常大的文本文件和多种 clob 数据类型。
-
TBL_NOTES - 注意 - sql server 上的文本数据类型。 TBL_NOTES- 注意 - Oracle.379012 中的 CLOB 数据类型是 sql server 中的行数。远程表的定义 - ID-int、REPORT_ID- int、UNIQUE_ID- varchar、user_id -int、NOTE-text、DTS-datetime、 SalesNote- text,userrole-varchar,userein- varchar
标签: oracle performance plsql clob sql-tuning