【问题标题】:How to visualize CLOB content - Oracle如何可视化 CLOB 内容 - Oracle
【发布时间】:2015-07-21 14:24:25
【问题描述】:

我想选择并可视化具有CLOB 数据类型(>100 字节)的列的内容。

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(ds_cirurgia,1,4000))
  from AVISO_CIRURGIA
 where cd_paciente = 123456789;

但我得到这个错误:

[SELECT - 0 row(s), 0.000 secs]  [Error Code: 997, SQL State: 42000]  ORA-00997: illegal use of LONG datatype

我在另一列中使用了UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR()),它有效。

在这种情况下有什么问题?

【问题讨论】:

  • 请贴出 select data_type from user_tab_columns where table_name = 'AVISO_CIRURGIA' and column_name = upper('ds_cirurgia')的结果;
  • 对于 CLOB,您可以使用 GetClobVal() 函数
  • 嗨@MarmiteBomber。谢谢你的帮助。我运行了您建议的查询,但似乎我的 user_tab_columns 为空。当我执行一个简单的选择时,例如:“从 AVISO_CIRURGIA 中选择 ds_cirurgia”,它将每一行显示为“CLOB,以字节为单位的大小”,例如:第一行中的“CLOB,202 字节”,“CLOB,482 字节”在第二行......
  • 抱歉最后的评论。现在它可以使用: select * from ALL_TAB_COLUMNS where table_name = 'AVISO_CIRURGIA' and column_name = upper('ds_cirurgia'); TABLE_NAME:AVISO_CIRURGIA COLUMN_NAME:DS_CIRURGIA DATA_TYPE:LONG
  • @Henrique Amaral 你从这个查询中得到了什么?还要检查 DBMS_LOB.SUBSTR(col_name,1,4000) 中的交换参数 - 应该是 4000,1

标签: sql oracle select clob ora-00997


【解决方案1】:

你可以直接调用DBMS_LOB.SUBSTR:它返回一个varchar2

select DBMS_LOB.SUBSTR(ds_cirurgia,1,4000)
from   AVISO_CIRURGIA
where  cd_paciente = 123456789

但是,请记住,Oracle SQL 只能拥有 4000 个字节的 varchar2,而不是 4000 个字符。如果字符串包含 Unicode 字符,您的调用可能会失败。

【讨论】:

  • 你到底为什么要编辑你自己版本的真相。如果你是对的,让 OP 编辑​​他的问题,但我不认为你是。
【解决方案2】:

您的列类型是 LONG 而不是 CLOB。只需在 USER_TAB_COLUMNS 中查找即可。

Here 是一些解决方法。我建议使用 CTAS 将类型更改为 CLOB。

create table t1 as
select ...
to_lob(c) c  /* convert to CLOB */
from t;

之后,您可以简单地转换为 VARCHAR,例如

 cast (substr(col_name,1,4000) as varchar2(4000)) 

更新

当然你也可以使用 DBMS_LOB.SUBSTR

 DBMS_LOB.SUBSTR(col_name,4000,1)

但请注意此函数的签名:第二个参数是长度,第三个偏移量(反之亦然,如 substr)。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2010-12-07
    • 1970-01-01
    • 2018-08-23
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多