Vis*_*eja 0 oracle pivot oracle11g
有人可以看看我的查询。当我尝试取消对任何注释字段的注释时,oracle 会抛出错误。
SELECT *
FROM (
SELECT ratfac.rating_id,
ratfac.label_en,
ratfac.ratingmodel_factor_id,
ratfac.weight,
ratfac.rating_calculated,
ratfac.rating,
ratfac.rating_adjusted,
ratfac.override_comment,
ratfac.rating_override,
ratfac.notch_value,
ratfac.notch_value_calculated,
ratfac.notch_value_adjusted,
ratfac.score,
ratfac.score_calculated,
ratfac.score_adjusted,
ratfac.factor_comment
FROM vw_ratingfactor ratfac ) pivot ( min(ratingmodel_factor_id) ratingmodel_factor_id, min(weight) weight, min(rating_calculated) rating_calculated, min(rating) rating,
--MAX(RATING_ADJUSTED) as RATING_ADJ,
min(override_comment) override_comment, min(rating_override) rating_override, min(notch_value) notch_value,
--MIN(NOTCH_VALUE_CALCULATED) NOTCH_VALUE_CALCULATED,
--MIN(NOTCH_VALUE_ADJUSTED) NOTCH_VALUE_ADJUSTED,
min(score) score, min(score_calculated) score_calculated, min(score_adjusted) score_adjusted, min(factor_comment) factor_comment FOR label_en IN ('Market'
|| chr(38)
||'Competitiveness' AS marketcompetitiveness,
'Industry' AS industry,
'Company Strategy and Management' AS company_stratergy_mgmt,
'Financial Performance' AS financial_performance,
'Need for and Access to Funds' AS needforfunds ) )
Run Code Online (Sandbox Code Playgroud)
问题是为透视列生成的列名的长度。
您拥有的最长前缀company_stratergy_mgmt是 22 个字符。在聚合别名之前会自动添加下划线,因此在达到30 个字符的列名限制之前,您只剩下 7 个字符了。Oracle 正在以 30 个字符的限制静默截断生成的名称,这导致了重复。
一些聚合是可以的,例如rating,生成company_stratergy_mgmt_rating- 29 个字符。然后,您可以使用以下名称之一rating_%。但是您有两个,因此它会尝试生成如下名称:
company_stratergy_mgmt_rating_calculated -> company_stratergy_mgmt_rating_
company_stratergy_mgmt_rating OK
company_stratergy_mgmt_rating_override -> company_stratergy_mgmt_rating_
Run Code Online (Sandbox Code Playgroud)
双方company_stratergy_mgmt_rating_calculated并company_stratergy_mgmt_rating_override截断到同30个字符的名称,company_stratergy_mgmt_rating_。由于它们相同,列名是重复的,因此出现 ORA-00918 错误。
其他人也有同样的问题,这些只是例子。如果您修复了 的拼写company_stratergy以丢失额外的内容,r那么您可以使用这些列摆脱它,即使您取消了对rating_adjustment聚合的注释,因为它们将以 , 结尾_a,_c并且_o再次成为唯一的。但是如果你取消对notch_value_%聚合的注释,你仍然会遇到同样的问题。
所以你需要选择更短的前缀,或者更短的聚合别名,这样所有生成的名称最好不要被截断,如果它们被截断,那么它们仍然是唯一的。
| 归档时间: |
|
| 查看次数: |
5021 次 |
| 最近记录: |