【问题标题】:How to Convert SQL Server NVARCHAR(3000) to Oracle NCHAR如何将 SQL Server NVARCHAR(3000) 转换为 Oracle NCHAR
【发布时间】: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


【解决方案1】:

如果你需要声明一个可变长度的字符串,你必须提供它的最大长度 细绳。例如,VARCHAR2 数据类型。以下示例说明了声明和 使用一些字符串变量:

DECLARE
name varchar2(20);

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2019-03-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多