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;

参考技术A 应该是说,你拼接的查询结果,某些行已经超过了varchar2(4000)的最大长度。 参考技术B 这要看SQL的版本与支援厂商

以上是关于oracle 字符串连接的结果过长的问题怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

C#连接oracle连接字符串怎么写啊?

插入oracle的long类型,报字符串过长怎么解决

C#连接oracle连接字符串怎么写啊?

oracle报错解决

sql server2005远程连接oracle11g查询结果中文乱码,怎么解决?

oracle listagg 拼接的字符串给多少长度