oracle 字符串连接的结果过长的问题怎么解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 字符串连接的结果过长的问题怎么解决相关的知识,希望对你有一定的参考价值。
如我要显示select rpad(' ',5000)||'a' from dual
不能靠连接字符串来处理大字符串。一旦这个字符串长度超过4000,就会出现ORA-01489: 字符串连接的结果过长。你那个5000当然不行。不过可以用CLOB类型来处理。追问请问怎么处理呢?
追答呃,楼下正确。。
参考技术A 如果你用PL/SQL时,plsql下的varchar类型可以达到32K,可以先将表中的字符串读入PLSQL中,在进行连接后再做处理如果必须在SQL中,请使用CLOB类型来存储字符串,并使用dbms_lob.append来连接,最大可以达到4GB 参考技术B select to_clob(rpad(' ',5000))||'a' from dual 参考技术C 写在config里面 参考技术D select to_clob(rpad(' ',5000))||'a' from dual
执行这条SQL语句的时候报错:ORA-01489: 字符串连接的结果过长,请怎么解决 是增加字符串链接么
语句:
WITH DM_TBLS AS
(SELECT DECODE(T.DATA_TYPE,
'CHAR',
'''''''''||' || T.COLUMN_NAME || '||''''''''',
'VARCHAR2',
'''''''''||' || T.COLUMN_NAME || '||''''''''',
'DATE',
'''TO_DATE(''''''||to_char(' || T.COLUMN_NAME ||
',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')''',
T.COLUMN_NAME) COLUMN_NAME,
T.COLUMN_ID,
T.TABLE_NAME,
T.OWNER,
T.COLUMN_NAME COL1,
LAG(COLUMN_ID) OVER(PARTITION BY T.TABLE_NAME ORDER BY T.COLUMN_ID) RN
FROM DBA_TAB_COLUMNS T
WHERE T.OWNER = UPPER('&V_OWNER'))
SELECT --T.TABLE_NAME,T.OWNER,
'SELECT ''INSERT INTO '||T.OWNER||'.'||T.TABLE_NAME||' (''||' ||
REPLACE(SUBSTRB(MAX(CHR(64 + LEVEL) || SYS_CONNECT_BY_PATH(T.COLUMN_NAME, '#')),
3),
'#',
'||'',''||') || '||'');'' TEXT FROM ' || T.OWNER || '.' || T.TABLE_NAME || ';' MYSQL
FROM DM_TBLS T
START WITH RN IS NULL
CONNECT BY RN = PRIOR COLUMN_ID
AND TABLE_NAME = PRIOR TABLE_NAME
GROUP BY T.OWNER,
T.TABLE_NAME;
以上是关于oracle 字符串连接的结果过长的问题怎么解决的主要内容,如果未能解决你的问题,请参考以下文章