【发布时间】:2017-02-09 04:43:39
【问题描述】:
我需要通过数据库链接从 Oracle 查询 SQL Server 中的表。我需要查询的 SQL Server 表之一有一个 NVARCHAR 列,最大长度为 3000 个字符。 Oracle 将其视为 LONG 数据类型,因此尝试使用 TO_NCHAR 以便我可以读取这些值会返回以下错误:
ORA-00932:不一致的数据类型:预期的 NCHAR 得到了 NLONG
Oracle 中有没有一种方法可以使用 SQL 或 PL/SQL 从NVARCHAR(3000) 列中获取值,或者最多获取前 2000 个字符?
【问题讨论】:
-
为什么是 LONG 而不是 CLOB?
-
我今天早上使用 TO_NCLOB 进行了测试,但收到以下错误:ORA-22992: cannot use LOB locators selected from remote tables
-
尝试 CAST(column_name AS NVARCHAR2(3000))
-
不幸的是,一旦 Oracle 将一个值标记为 LONG,您就无能为力了。您可以将 LONG (NLONG) 转换为 CLOB (NCLOB),这样会更好,但只能作为 INSERT 语句的一部分。
-
使用 12c 迁移 - 它支持 32k VARCHAR2 - 并且不要使用 NVARCHAR2 - 只需将您的数据库设置为 UTF-8 或等效的,默认情况下您将获得 unicode 支持
标签: sql sql-server oracle plsql type-conversion