我想选择并可视化具有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())
并且它可以正常工作。
这种情况有什么问题?
答案 0 :(得分:0)
您可以通过致电@include keyframes(border-animation) {
0% {
border: 10px solid transparent;
border-right: 10px solid black;
}
25% {
border: 10px solid transparent;
border-bottom: 10px solid;
}
50% {
border: 10px solid transparent;
border-left: 10px solid;
}
75% {
border: 10px solid transparent;
border-top: 10px solid;
}
};
离开它:它会返回DBMS_LOB.SUBSTR
:
varchar2
但是,请记住,Oracle SQL只能拥有4000个字节的select DBMS_LOB.SUBSTR(ds_cirurgia,1,4000)
from AVISO_CIRURGIA
where cd_paciente = 123456789
,而不是4000个字符。如果字符串包含Unicode字符,则您的调用可能会失败。
答案 1 :(得分:0)
您的列类型 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中)。