【问题标题】:DBA_MVIEWS: ORA-00932: inconsistent datatypes: expected - got LONGDBA_MVIEWS:ORA-00932:不一致的数据类型:预期 - 长
【发布时间】:2018-12-03 17:40:48
【问题描述】:

我想将 DBA_MVIEWS 表的“QUERY”列视为简单的 TEXT。

如果我执行以下语句:

select to_lob(query) from dba_mviews;

我有错误:

ORA-00932: inconsistent datatypes: expected - got LONG

我对此没有任何错误:

select query from dba_mviews;

但我在 DBVisualizer 中获得了 CLOB 结果。

我正在使用:

  • Oracle Database 12c 企业版版本 12.1.0.2.0 - 64 位生产
  • 产品:DbVisualizer Pro 10.0.15 [Build #2861]
  • 操作系统:Mac OS X
  • 操作系统版本:10.14.1
  • 操作系统架构:x86_64
  • Java 版本:1.8.0_172

发生了什么事?

【问题讨论】:

    标签: oracle oracle12c long-integer clob


    【解决方案1】:

    From the Oracle documentation(强调):

    TO_LOBlong_column 列中的LONGLONG RAW 值转换为LOB 值。您只能将此函数应用于LONGLONG RAW 列,并且只能应用于INSERT 语句中子查询的选择列表中

    因此,您不能像您尝试做的那样在简单的查询中使用它。并且创建一个表来插入查询字符串可能对您来说不是很有帮助或实用性。

    处理long 值通常有点麻烦。您可以将它们转换为 PL/SQL 块中的 CLOB,例如:

    declare
      l_long long;
      l_clob clob;
    begin
      select query into l_long from dba_mviews;
      l_clob := to_clob(l_long);
      -- do something with l_clob
    end;
    /
    

    ...但这在这里也可能不是很有用,即使您创建了一个返回流水线 CLOB 的函数。

    DBVisualizer docs 说:

    由于二进制/BLOB 和 CLOB 数据的性质,这些类型的单元格只能在单元格编辑器中完全修改和查看。 (表单编辑器部分支持查看图像数据和从文件加载)。

    在网格中,二进制/BLOB 和 CLOB 数据默认由图标和值的大小呈现。您可以在“工具属性”对话框中的“常规”选项卡下的“网格/二进制/BLOB 和 CLOB 数据”类别中选择另一种演示格式。按值选择会导致性能下降,并且内存消耗会急剧增加。

    这不是我用过的工具,但听起来它正在处理和显示 long 值,就像它已经是 CLOB 一样,所以希望这仍然适用。

    【讨论】:

    • 谢谢,很有用
    • 公平地说,Oracle 已经达到 18c 并且他们仍然没有对数据字典中的 LONG 列做任何事情,这确实是一个糟糕的表现。天知道他们对许可证收费,他们应该为此做点什么。
    猜你喜欢
    • 2011-06-03
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2019-08-25
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多