场景如下:
: Oracle 19.3.0.0.0
: MySQL 8.0.22-13
我们已经创建了DBLINK从Oracle到MySQL使用DG4ODBC数据库链接。(跟进文件编号1320645.1)我们能够连接和选择从Oracle到MySQL,但是我们面临以下问题:
- 当从Oracle SQL Prompt连接时,它工作正常,如下所示:
SQL> select * from "ocsweb"."sounds"@myodbc5;
ID HARDWARE_ID MANUFACTURER NAME DESCRIPTION
---------- ----------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
1 2313 Microsoft High Definition Audio Device High Definition Audio Device
2 2313 Intel(R) Corporation Intel(R) Display Audio Intel(R) Display Audio
SQL>
- 但是,当我尝试从SQL开发人员执行相同的SQL或使用Python和cx_oracle连接到数据库时,我们看到下面的错误:
SQL Error [600] [60000]: ORA-00600: internal error code, arguments: [HO define: Long fetch], [], [], [], [], [], [], [], [], [], [], []¶
- 当我们尝试只使用一个varchar数据类型列进行SELECT时,它会返回数据。
问题," SQL Error [600] [60000]: ORA-00600:内部错误代码,参数:[HO define: Long fetch] "现在已经修好了。(当获取多个VARCHAR列时)
我们现在能够选择多个VARCHAR数据类型列,而不需要oracle引擎将其转换为LONG。(我已经测试了从SQL开发人员和DBeaver工具)为了解决这个问题,我们在odbc实例的初始化文件中包含了以下参数:
HS_KEEP_REMOTE_COLUMN_SIZE =当地(在数据从非Oracle数据库转换到网关,再转换到Oracle数据库时,在计算(VAR)CHAR数据类型的长度时,是否抑制比率扩展。)当设置为LOCAL时,网关和Oracle数据库之间的扩展将被抑制。
HS_NLS_LENGTH_SEMANTICS =字符(当设置为CHAR时,非oracle数据库的(VAR)CHAR列将被解释为具有CHAR语义)
HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL
解决了我的问题,一个PostgreSQL数据库有一个表,有2个字段varchar(500)