oracle - 通过 DB Link 从 MariaDB 获取 LONGTEXT 到 Oracle
问题描述
我的目标是将包含LONGTEXT
从 MariaDB(10.1.26 64 位)的表复制到 Oracle(12.1.0.1.0 64 位)
这是我的initCCS.ora
文件:
HS_FDS_CONNECT_INFO=CCS
HS_FDS_TRACE_LEVEL=INFO
HS_FDS_SHAREABLE_NAME=/path/to/libodbc/libodbc.so
HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL
HS_NLS_NCHAR=UCS2
HS_LANGUAGE=AMERICAN_AMERICA.UTF8
set ODBCINI=/path/to/odbc/ini/odbc.ini
这是odbc.ini
CCS 的一部分:
[CCS]
Driver = /path/to/lib/libmaodbc.so
server = mariadb.server.loc
database = db_name
CHARSET = UTF8
这是我要复制的表(我已将其简化为仅包含 2 列):
+--------------+--------------+-------------+
| Column | Mariadb type | Oracle type |
+--------------+--------------+-------------+
| ID | INTEGER | INTEGER |
| LONG_CONTENT | LONGTEXT | CLOB |
+--------------+--------------+-------------+
LONG_CONTENT
列包含巨大的字符串(超过 32k 个符号)。
当我尝试复制没有LONGTEXT
列的表时,它工作正常:
insert into local_table (id)
select id from remote_table@ccs
当我尝试复制LONGTEXT
列时 - 我得到ORA-00997
:
insert into local_table (id, long_content)
select id, long_content from remote_table@ccs
ORA-00997: 非法使用 LONG 数据类型
我尝试使用 CTAS 复制此表:
create table local_temp_table as
select *
from remote_table@ccs
ORA-00997: 非法使用 LONG 数据类型
对已复制的行使用更新:
update local_table lt
set lt.long_content = (
select rt.long_content
from remote_table@ccs rt
where rt.id = lt.id
)
ORA-00997: 非法使用 LONG 数据类型
使用动态 sql:
execute immediate 'insert into local_table (long_content) select long_content from remote_table@ccs where id = 1';
ORA-00997: 非法使用 LONG 数据类型
当我尝试复制带有LONGBLOB
列的表时出现相同的错误。
在这一点上,我不确定是什么导致了问题——我的设置,或者我在 PL/SQL 中复制表的方法。
解决方案
推荐阅读
- regex - 用于验证特定正则表达式输入的正则表达式字符串
- node.js - 为我的移动应用程序选择最合适的平台来开发支持(数据访问服务层)
- c# - 如何更改richtextbox中选定文本的字体
- python - django 如何在查询集或序列化程序中自然地更改时间格式
- sql - Oracle 数据库 11gR2 快捷版
- spring-boot - 没有可用于服务的服务器:localhost
- c# - Assembly-CSharp.csproj 错误和 Intellisense 在 VSCode 中不起作用
- spring-boot - 使用 Spring Webflux 实现 trace-id
- c# - 获取调查 C# 中选择的用户数
- c# - ListView 在更新其屏幕后不保存更改