首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从一个Oracle数据库复制到另一个具有不同Unicode的数据库时,ORA-01406

将数据从一个Oracle数据库复制到另一个具有不同Unicode的数据库时,ORA-01406
EN

Stack Overflow用户
提问于 2022-03-04 12:36:40
回答 3查看 118关注 0票数 0

我有两个相同的表: original_table,两个不同的数据库中的目标表。

代码语言:javascript
复制
-- Oracle 1
create table original_table
(
  my_id   NUMBER(11) not null,
  my_fld  CHAR(15),
)

-- Oracle 2
create table destination_table
(
  my_id   NUMBER(11) not null,
  my_fld  CHAR(15),
)

我使用过程和数据库链接将数据从original_table复制到destination_table。这是一个伪码版本。

代码语言:javascript
复制
PROCEDURE COPY_DATA AS
BEGIN
    FOR c_cursor IN (SELECT my_id ,my_fld FROM original_table@dblink) 
    LOOP
        INSERT INTO destination_table 
        VALUES (c_cursor.my_id, c_cursor.my_fld);
    END LOOP; 
END;

有时,当在original_table.my_fld列中插入特殊字符时,Oracle会抛出错误。

ORA-01406:获取的列值被截断

这是因为这两个数据库有不同的Unicode,我在循环中选择数据。我试着在循环之外写select-insert语句,它运行得很好。

你能告诉我怎么解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-07 13:08:45

我在string字段中使用了联阿比my函数。

代码语言:javascript
复制
 FOR c_cursor IN (SELECT my_id ,UNISTR(my_fld) FROM original_table@dblink) 
    LOOP
        INSERT INTO destination_table 
        VALUES (c_cursor.my_id, c_cursor.my_fld);
    END LOOP; 

它解决了问题。

票数 0
EN

Stack Overflow用户

发布于 2022-03-04 13:09:33

如果您只想将所有数据从一个表复制到另一个表,您不需要游标,就可以在过程中使用sql完成它。希望能帮上忙..。

代码语言:javascript
复制
PROCEDURE COPY_DATA AS
BEGIN
   INSERT INTO [database].[schema].destination_table (column_list)
   SELECT column_list
   FROM [database].[schema].original_table
   WHERE condition;
END;
票数 0
EN

Stack Overflow用户

发布于 2022-03-04 13:16:48

选择并插入数据行-逐行基本上是您所能做的最慢的方法。用这个:

代码语言:javascript
复制
INSERT INTO destination_table (my_id ,my_fld)
SELECT my_id ,my_fld 
FROM original_table@dblink;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71351519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档