我有两个相同的表: original_table,两个不同的数据库中的目标表。
-- 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。这是一个伪码版本。
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语句,它运行得很好。
你能告诉我怎么解决这个问题吗?
发布于 2022-03-07 13:08:45
我在string字段中使用了联阿比my函数。
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; 它解决了问题。
发布于 2022-03-04 13:09:33
如果您只想将所有数据从一个表复制到另一个表,您不需要游标,就可以在过程中使用sql完成它。希望能帮上忙..。
PROCEDURE COPY_DATA AS
BEGIN
INSERT INTO [database].[schema].destination_table (column_list)
SELECT column_list
FROM [database].[schema].original_table
WHERE condition;
END;发布于 2022-03-04 13:16:48
选择并插入数据行-逐行基本上是您所能做的最慢的方法。用这个:
INSERT INTO destination_table (my_id ,my_fld)
SELECT my_id ,my_fld
FROM original_table@dblink;https://stackoverflow.com/questions/71351519
复制相似问题