Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用dbms#u lob.substr转换和连接clob列会得到';ORA-01489:字符串串联的结果太长';错误_Sql_Oracle - Fatal编程技术网

Sql 使用dbms#u lob.substr转换和连接clob列会得到';ORA-01489:字符串串联的结果太长';错误

Sql 使用dbms#u lob.substr转换和连接clob列会得到';ORA-01489:字符串串联的结果太长';错误,sql,oracle,Sql,Oracle,我已经写下了一个问题 SELECT DISTINCT s.last_call_et, s.sid , s.sql_id, to_clob(dbms_lob.substr(sq.sql_fulltext,4000,1)) || to_clob(dbms_lob.substr(sq.sql_fulltext,4000,4001)) SQL_TEXT, s.username, s.status, s.blocking_session, s.BLOCKING_INSTANCE, sq.LAST_ACTI

我已经写下了一个问题

SELECT DISTINCT s.last_call_et,
s.sid ,
s.sql_id,
to_clob(dbms_lob.substr(sq.sql_fulltext,4000,1)) ||
to_clob(dbms_lob.substr(sq.sql_fulltext,4000,4001)) SQL_TEXT,
s.username,
s.status,
s.blocking_session,
s.BLOCKING_INSTANCE,
sq.LAST_ACTIVE_TIME,
NULL
FROM gv$session s,
    gv$sql sq
  WHERE sq.address    = s.sql_address
AND sq.hash_value   = s.SQL_HASH_VALUE
AND sq.sql_id       = s.sql_id
AND s.status        = 'ACTIVE'
AND s.last_call_et >= 500
AND s.sql_id       IS NOT NULL 
AND SQ.SQL_TEXT NOT LIKE '%$%';   
这给了我ORA-01489:字符串连接的结果太长错误,可能是因为上面查询中的SQL_文本列超过4000个字符。 请给我建议一条路


谢谢。

我认为您无法连接CLOB。试过这个,它成功了

SELECT DISTINCT s.last_call_et,
s.sid ,
s.sql_id,
dbms_lob.substr(sq.sql_fulltext,4000,1) ||
dbms_lob.substr(sq.sql_fulltext,4000,4001) SQL_TEXT,
s.username,
s.status,
s.blocking_session,
s.BLOCKING_INSTANCE,
sq.LAST_ACTIVE_TIME,
NULL
FROM gv$session s,
    gv$sql sq
  WHERE sq.address    = s.sql_address
AND sq.hash_value   = s.SQL_HASH_VALUE
AND sq.sql_id       = s.sql_id
AND s.status        = 'ACTIVE'
AND s.last_call_et >= 500
AND s.sql_id       IS NOT NULL 
AND SQ.SQL_TEXT NOT LIKE '%$%'

原因是您使用的连接运算符(“| |”)是在VARCHAR2上定义的,而不是在CLOBS>上定义的。因此,Oracle对VARCHAR2执行隐式类型转换,其大小限制为4000字节。 应该使用DBMS_LOB.APPEND来连接LOB。
请参阅:

谢谢您的回复。我在DBMS_LOB.APPEND(DBMS_LOB.substr(sq.sql_fulltext,4000,1),DBMS_LOB.substr(sq.sql_fulltext,40004001))sql_TEXT上面的查询中尝试了这一点,但它给了我一个错误,说-DBMS_LOB“。“APPEND”:无效标识符我是以错误的方式使用它还是什么?