我写了一个查询
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_TEXT列超过了4000个字符。 请建议一下。
感谢。
答案 0 :(得分:0)
我认为你不能连接Clobs。试过这个,它有效,
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 '%$%'
答案 1 :(得分:0)
原因是你使用的连接运算符('||')是在VARCHAR2上定义的,而不是在CLOBS>上定义的。因此,Oracle对VARCHAR2进行了隐式类型转换,VARCHAR2的大小限制为4000字节。 您应该使用DBMS_LOB.APPEND来连接LOB。 请参阅:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_lob.htm#BABEAJAD