oracle SELECT语句太长的问题
有个项目需要自动拼接SQL语句,因为需要根据产品分列合计展现多列所以用到了循环拼接中间查询字段部分,如:trim(to_char(sum(casewhent.PRODUC...
有个项目需要自动拼接SQL语句,因为需要根据产品分列合计展现多列所以用到了循环拼接中间查询字段部分,如:
trim(to_char(sum(case
when t.PRODUCT_NAME = 'P000000005' then
t.profit
else
0
end),
'99999999.99')) as 产品1
产品数量大致在12个左右,拼接出来的SQL语句长度是在20000字符左右,用long变量承接,在执行SQL语句是,本地WINDOWS下安装的ORACLE 10G是可以执行的,但是服务起上的LINUX下安装的ORACLE 10G下执行此语句就会报 ORA-00972:identifier is too long
请问这个ORACLE问题可以通过数据库配置解决吗?如果可以应该如何配置?
感谢大家的回答,问题原因已经找到了,其实说来很简单,是字符集的问题。因为在UTF-8和GB1232中一个中文字符的长度是不一样的,一个是占2位,一个是占三位,我两个ORACLE数据库用了不同的字符集。而ORACLE的SQL语句中,AS的字段名必须小于30位,我的产品名称中有一个12中文字的,所以在UTF-8中12个中文就变成36个字符,超过了字段名30位的最大长度。而在GB1232中是24位的长度,可以执行。顺便给自己加分,呵呵。这么奇葩的问题也只有我自己能找到原因吧。 展开
trim(to_char(sum(case
when t.PRODUCT_NAME = 'P000000005' then
t.profit
else
0
end),
'99999999.99')) as 产品1
产品数量大致在12个左右,拼接出来的SQL语句长度是在20000字符左右,用long变量承接,在执行SQL语句是,本地WINDOWS下安装的ORACLE 10G是可以执行的,但是服务起上的LINUX下安装的ORACLE 10G下执行此语句就会报 ORA-00972:identifier is too long
请问这个ORACLE问题可以通过数据库配置解决吗?如果可以应该如何配置?
感谢大家的回答,问题原因已经找到了,其实说来很简单,是字符集的问题。因为在UTF-8和GB1232中一个中文字符的长度是不一样的,一个是占2位,一个是占三位,我两个ORACLE数据库用了不同的字符集。而ORACLE的SQL语句中,AS的字段名必须小于30位,我的产品名称中有一个12中文字的,所以在UTF-8中12个中文就变成36个字符,超过了字段名30位的最大长度。而在GB1232中是24位的长度,可以执行。顺便给自己加分,呵呵。这么奇葩的问题也只有我自己能找到原因吧。 展开
展开全部
按理说,应该不是总长度的问题。
你再仔细检查一下sql语句,和 程序的执行过程。
参考:按照这个错误的原因和解决方案。
Error:
ORA-00972: identifier is too long
Cause:
You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters.
Action:
The options to resolve this Oracle error are:
Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.
你再仔细检查一下sql语句,和 程序的执行过程。
参考:按照这个错误的原因和解决方案。
Error:
ORA-00972: identifier is too long
Cause:
You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters.
Action:
The options to resolve this Oracle error are:
Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.
展开全部
应该不是总长度的问题吧。我通常都用varchar2来存贮字符,可以存储32767。
但是要注意,有时候在系统的一些函数里varchar2只支持4000,但是它本身是可以存储32767的。
但是要注意,有时候在系统的一些函数里varchar2只支持4000,但是它本身是可以存储32767的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实在没办法就想办法缩短一下SQL语句吧!
比如说用
decode替换case when
to_char(decode(t.PRODUCT_NAME,'P000000005',t.profit,0)) as 产品1
比如说用
decode替换case when
to_char(decode(t.PRODUCT_NAME,'P000000005',t.profit,0)) as 产品1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你仔细检查下SQL,看两边的是否一致,可以将SQL一段一段的放到long变量里面执行,看能否通过,一步一步排查原因。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一步一步测试,可以打出来看看你拼接的sql语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询