0

我想选择并可视化具有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())在另一列中使用过,它有效。

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

4

2 回答 2

0

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

以下是一些解决方法。我建议使用 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)。

于 2015-07-21T14:50:17.550 回答
0

你可以把它留给DBMS_LOB.SUBSTR: 它返回一个varchar2:

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

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

于 2015-07-21T14:26:24.800 回答