ORA-01489: 字符串连接的结果太长 01489.00000 - "result of string concatenation is too long"
ORA-01489: result of string concatenation is too long 01489. 00000 - "result of string concatenation is too long"
我有这个查询,但我得到了一个 ORA-01489 错误:ORA-01489:字符串连接的结果太长 01489.00000 - "result of string concatenation is too long",是否可以通过设置系统变量来解决这个问题?
SELECT "USER_PRIMARY_sector","LOGIN","FIRST_NAME","LAST_NAME","sector_ROLE"
FROM (
SELECT user_primary_sector,login, first_name, last_name,
LTRIM(MAX(SYS_CONNECT_BY_PATH(rights,' / '))
KEEP (DENSE_RANK LAST ORDER BY curr),' / ') AS sector_ROLE
FROM
(SELECT login,
first_name,
last_name,
user_primary_sector,
rights,
ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) AS curr,
ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) -1 AS prev
FROM (select member0_.login, member0_.first_name first_name, sector2.sector_name user_primary_sector, member0_.last_name last_name,
CONCAT(CONCAT(sector.sector_name, ' - '), role3_.role_name) rights
from
TLC_DEVICES.t_member member0_
inner join TLC_DEVICES.t_user member0_1_ on member0_.member_id=member0_1_.user_id
inner join TLC_DEVICES.t_playable_role playedrole1_ on member0_.member_id=playedrole1_.user_id
inner join TLC_DEVICES.t_sector_role sectorrole2_ on playedrole1_.sector_role_id=sectorrole2_.sector_role_id
inner join TLC_DEVICES.t_role role3_ on sectorrole2_.role_id=role3_.role_id
inner join TLC_DEVICES.t_sector sector on sectorrole2_.sector_id=sector.sector_id
inner join TLC_DEVICES.t_sector sector2 on sector2.sector_id=member0_1_.primary_sector_id
where current_date between playedrole1_.start_date and playedrole1_.end_date
order by sector.sector_name
))
GROUP BY login, first_name, last_name, user_primary_sector
CONNECT BY prev = PRIOR curr AND login = PRIOR login
START WITH curr = 1
)
ORDER BY user_PRIMARY_sector, FIRST_NAME, LAST_NAME;
一个选项是将 MAX_STRING_SIZE
系统变量设置为 EXTENDED
。
来自 Oracle documentation:
Variable-length character string having maximum length size bytes or characters. You must specify size for VARCHAR2. Minimum size is 1 byte or 1 character. Maximum size is:
32767 bytes or characters if MAX_STRING_SIZE = EXTENDED
4000 bytes or characters if MAX_STRING_SIZE = STANDARD
因此,如果您的 MAX_STRING_SIZE
当前设置为 STANDARD
,那么如果您的连接字符串超过 4000 个字节或字符,您将收到 ORA-01489
错误。以下是进行更改的方法:
ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED;
如果你的MAX_STRING_SIZE
已经设置为EXTENDED
,那么你将不得不寻找另一种方法来处理这么长的字符串。
我有这个查询,但我得到了一个 ORA-01489 错误:ORA-01489:字符串连接的结果太长 01489.00000 - "result of string concatenation is too long",是否可以通过设置系统变量来解决这个问题?
SELECT "USER_PRIMARY_sector","LOGIN","FIRST_NAME","LAST_NAME","sector_ROLE"
FROM (
SELECT user_primary_sector,login, first_name, last_name,
LTRIM(MAX(SYS_CONNECT_BY_PATH(rights,' / '))
KEEP (DENSE_RANK LAST ORDER BY curr),' / ') AS sector_ROLE
FROM
(SELECT login,
first_name,
last_name,
user_primary_sector,
rights,
ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) AS curr,
ROW_NUMBER() OVER (PARTITION BY login ORDER BY rights) -1 AS prev
FROM (select member0_.login, member0_.first_name first_name, sector2.sector_name user_primary_sector, member0_.last_name last_name,
CONCAT(CONCAT(sector.sector_name, ' - '), role3_.role_name) rights
from
TLC_DEVICES.t_member member0_
inner join TLC_DEVICES.t_user member0_1_ on member0_.member_id=member0_1_.user_id
inner join TLC_DEVICES.t_playable_role playedrole1_ on member0_.member_id=playedrole1_.user_id
inner join TLC_DEVICES.t_sector_role sectorrole2_ on playedrole1_.sector_role_id=sectorrole2_.sector_role_id
inner join TLC_DEVICES.t_role role3_ on sectorrole2_.role_id=role3_.role_id
inner join TLC_DEVICES.t_sector sector on sectorrole2_.sector_id=sector.sector_id
inner join TLC_DEVICES.t_sector sector2 on sector2.sector_id=member0_1_.primary_sector_id
where current_date between playedrole1_.start_date and playedrole1_.end_date
order by sector.sector_name
))
GROUP BY login, first_name, last_name, user_primary_sector
CONNECT BY prev = PRIOR curr AND login = PRIOR login
START WITH curr = 1
)
ORDER BY user_PRIMARY_sector, FIRST_NAME, LAST_NAME;
一个选项是将 MAX_STRING_SIZE
系统变量设置为 EXTENDED
。
来自 Oracle documentation:
Variable-length character string having maximum length size bytes or characters. You must specify size for VARCHAR2. Minimum size is 1 byte or 1 character. Maximum size is:
32767 bytes or characters if MAX_STRING_SIZE = EXTENDED
4000 bytes or characters if MAX_STRING_SIZE = STANDARD
因此,如果您的 MAX_STRING_SIZE
当前设置为 STANDARD
,那么如果您的连接字符串超过 4000 个字节或字符,您将收到 ORA-01489
错误。以下是进行更改的方法:
ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED;
如果你的MAX_STRING_SIZE
已经设置为EXTENDED
,那么你将不得不寻找另一种方法来处理这么长的字符串。