Sort key too long - maximum number of columns in select statement
the sort key too long is caused by either too many group
functions or too many columns selected. Does anyone know the
maximum number of columns that can be selected in one statement ?
The Oracle 9i reference states ...
The GROUP BY expression and all of the
nondistinct aggregates functions (for example,
SUM, AVG) must fit within a single database
block.
... and the Oracle 9i SQL Reference states that ...
An order_by_clause can contain no more than 255
expressions.
You could check your own documentation, but i think it will
be the same.
Similar Messages
-
Error ORA-01467: sort key too long
Hi. I have just come across the error ORA-01467: sort key too long .
In the Oracle documentation, the 2 line
description of this error basically says that there may be too many columns
or group functions in the query, so I need to reduce the number of columns
in the query.
Here's the problem. The documentation does not say how many the limit is.
The query is quite complex, I suppose, but I don't see why it should be a
problem. In a nutshell, the main table has 3 text fields (which are the
index) and 154 floats. The query joins one of the text fields to another
table to get a lookup value and selects this out, along with the other two
text fields and the SUM of the numeric fields. The query groups by the two
text fields and the lookup.
I guess I saw this when I was using MS SQL Server 6.5 and tried to sum more
than 125 columns, but that went away in SQL Server 7. I am using Oracle 8
at this point but need to support Oracle 7, too.
I guess what I am looking for (at least) is the maximum number of columns
that can be in a grouping/summing query. I'd also like to know if this can
be worked around by changing a setting on the server, something to set the
maximum number of sums to 1000, perhaps? I am fine with working around this
in my software if I need to, as I have done previously (I took the first 125
sums into a temp table, then the next 125, etc. and joined the resulting
tables to get my results), but would really like to get a workaround that
was server-based, if possible.
Thanks for your help!
nullHi. I have just come across the error ORA-01467: sort key too long .
In the Oracle documentation, the 2 line
description of this error basically says that there may be too many columns
or group functions in the query, so I need to reduce the number of columns
in the query.
Here's the problem. The documentation does not say how many the limit is.
The query is quite complex, I suppose, but I don't see why it should be a
problem. In a nutshell, the main table has 3 text fields (which are the
index) and 154 floats. The query joins one of the text fields to another
table to get a lookup value and selects this out, along with the other two
text fields and the SUM of the numeric fields. The query groups by the two
text fields and the lookup.
I guess I saw this when I was using MS SQL Server 6.5 and tried to sum more
than 125 columns, but that went away in SQL Server 7. I am using Oracle 8
at this point but need to support Oracle 7, too.
I guess what I am looking for (at least) is the maximum number of columns
that can be in a grouping/summing query. I'd also like to know if this can
be worked around by changing a setting on the server, something to set the
maximum number of sums to 1000, perhaps? I am fine with working around this
in my software if I need to, as I have done previously (I took the first 125
sums into a temp table, then the next 125, etc. and joined the resulting
tables to get my results), but would really like to get a workaround that
was server-based, if possible.
Thanks for your help!
null -
ORA-01467: sort key too long
Hi,
I am trying to run the below query in toad but getting the error "ORA-01467: sort key too long".
SELECT :o,
:o,
MSD,
1,
SUM(FLAG),
DECODE(SUM(FLAGCOLOR),0,0,1),
SUM(DECODE(SIGN(Tiefool), -1,'',Tiefool)),
SUM(DECODE(SIGN(Tiegreen), -1,'',Tiegreen)),
SUM(DECODE(SIGN(TiesacTotaru), -1,'',TiesacTotaru)),
SUM(DECODE(SIGN(Tiesaccfaru), -1,'',Tiesaccfaru)),
SUM(DECODE(SIGN(Tiel), -1,'',Tiel)),
SUM(DECODE(SIGN(Tiemannj), -1,'',Tiemannj)),
SUM(DECODE(SIGN(HiYaNo57), -1,'',HiYaNo57)),
SUM(DECODE(SIGN(HiYaNoAttOIRHoLad), -1,'',HiYaNoAttOIRHoLad)),
SUM(DECODE(SIGN(HiYaNoAttOIRHomannj), -1,'',HiYaNoAttOIRHomannj)),
SUM(DECODE(SIGN(HiYaNoAttOIRHosmrlone), -1,'',HiYaNoAttOIRHosmrlone)),
SUM(DECODE(SIGN(HiYaNoAttOSwHomannj), -1,'',HiYaNoAttOSwHomannj)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57jFlr),-1,'',HiYaNoFlOIRHoCs57jFlr)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Re_00), -1,'',HiYaNoFlOIRHoCs57Re_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Re_01), -1,'',HiYaNoFlOIRHoCs57Re_01)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Ue_00), -1,'',HiYaNoFlOIRHoCs57Ue_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadG_00), -1,'',HiYaNoFlOIRHoLadG_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadR_00), -1,'',HiYaNoFlOIRHoLadR_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadR_01), -1,'',HiYaNoFlOIRHoLadR_01)),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadU_00), -1,'',HiYaNoFlOIRHoLadU_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_00), -1,'',HiYaNoFlOIRHomannj_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_01), -1,'',HiYaNoFlOIRHomannj_01)),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_02), -1,'',HiYaNoFlOIRHomannj_02)),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_03), -1,'',HiYaNoFlOIRHomannj_03)),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_00), -1,'',HiYaNoFlOIRHosmr_00)),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_01), -1,'',HiYaNoFlOIRHosmr_01)),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_02), -1,'',HiYaNoFlOIRHosmr_02)),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_03), -1,'',HiYaNoFlOIRHosmr_03)),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_00), -1,'',HiYaNoFlOSwHomannj_00)),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_01), -1,'',HiYaNoFlOSwHomannj_01)),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_02), -1,'',HiYaNoFlOSwHomannj_02)),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_03), -1,'',HiYaNoFlOSwHomannj_03)),
SUM(DECODE(SIGN(HiYaNoOIRCckOldCh), -1,'',HiYaNoOIRCckOldCh)),
SUM(DECODE(SIGN(HiYaNoOIRCcq), -1,'',HiYaNoOIRCcq)),
SUM(DECODE(SIGN(HiYaNoOIRHocAl_00), -1,'',HiYaNoOIRHocAl_00)),
SUM(DECODE(SIGN(HiYaNoOIRHokOldC_00), -1,'',HiYaNoOIRHokOldC_00)),
SUM(DECODE(SIGN(HiYaNoOIRHokOldC_01), -1,'',HiYaNoOIRHokOldC_01)),
SUM(DECODE(SIGN(HiYaNoOIRHoq), -1,'',HiYaNoOIRHoq)),
SUM(DECODE(SIGN(HiYatoyCs57), -1,'',HiYatoyCs57)),
SUM(DECODE(SIGN(HiYatoyLad), -1,'',HiYatoyLad)),
SUM(DECODE(SIGN(HiYatoymannj), -1,'',HiYatoymannj)),
SUM(DECODE(SIGN(HiYatoysmrlone),-1,'',HiYatoysmrlone)),
SUM(DECODE(SIGN(HiYaNoplymannj), -1,'',HiYaNoplymannj)),
SUM(DECODE(SIGN(redAtt), -1,'',redAtt)),
SUM(DECODE(SIGN(NoYaNoOutIratHoAtt), -1,'',NoYaNoOutIratHoAtt)),
SUM(DECODE(SIGN(vavaYakcttntodef), -1,'',vavaYakcttntodef)),
SUM(DECODE(SIGN(vavaYakcttntoMan), -1,'',vavaYakcttntoMan)),
SUM(DECODE(SIGN(vavaYaNoddvac), -1,'',vavaYaNoddvac)),
SUM(DECODE(SIGN(vavaYaNordvac), -1,'',vavaYaNordvac)),
SUM(DECODE(SIGN(vavaYasalRlcTotPktThp), -1,'',vavaYasalRlcTotPktThp)),
SUM(DECODE(SIGN(vavaYasalRlccfPktThp),-1,'',vavaYasalRlccfPktThp)),
SUM(DECODE(SIGN(vavaYamilRlcTotPktThp), -1,'',vavaYamilRlcTotPktThp)),
SUM(DECODE(SIGN(vavaYamilRlccfPktThp), -1,'',vavaYamilRlccfPktThp)),
SUM(DECODE(SIGN(MyYaNoauwcupytr00),-1,'',MyYaNoauwcupytr00)),
SUM(DECODE(SIGN(MyYaNoauwcupytr01),-1,'',MyYaNoauwcupytr01)),
SUM(DECODE(SIGN(MyYaNoauwcupytr02),-1,'',MyYaNoauwcupytr02)),
SUM(DECODE(SIGN(MyYaNoauwcupytr03),-1,'',MyYaNoauwcupytr03)),
SUM(DECODE(SIGN(MyYaNoauwcupytr04),-1,'',MyYaNoauwcupytr04)),
SUM(DECODE(SIGN(MyYaNoauwcupytr05),-1,'',MyYaNoauwcupytr05)),
SUM(DECODE(SIGN(MyYaNoauwcupytr06),-1,'',MyYaNoauwcupytr06)),
SUM(DECODE(SIGN(MyYaNoauwcupytr07),-1,'',MyYaNoauwcupytr07)),
SUM(DECODE(SIGN(MyYaNoauwcupytr08),-1,'',MyYaNoauwcupytr08)),
SUM(DECODE(SIGN(MyYaNoauwcupytr09),-1,'',MyYaNoauwcupytr09)),
SUM(DECODE(SIGN(MyYaNoauwcupytr10),-1,'',MyYaNoauwcupytr10)),
SUM(DECODE(SIGN(MyYaNoauwcupytr11),-1,'',MyYaNoauwcupytr11)),
SUM(DECODE(SIGN(MyYaNoauwcupytr12),-1,'',MyYaNoauwcupytr12)),
SUM(DECODE(SIGN(MyYaNoauwcupytr13),-1,'',MyYaNoauwcupytr13)),
SUM(DECODE(SIGN(MyYaNoauwcupytr14),-1,'',MyYaNoauwcupytr14)),
SUM(DECODE(SIGN(MyYaNoauwcupytr15),-1,'',MyYaNoauwcupytr15)),
SUM(DECODE(SIGN(MyYaNoravmyfFra00),-1,'',MyYaNoravmyfFra00)),
SUM(DECODE(SIGN(MyYaNoravmyfFra01),-1,'',MyYaNoravmyfFra01)),
SUM(DECODE(SIGN(MyYaNoravmyfFra02),-1,'',MyYaNoravmyfFra02)),
SUM(DECODE(SIGN(MyYaNoravmyfFra03),-1,'',MyYaNoravmyfFra03)),
SUM(DECODE(SIGN(MyYaNoravmyfFra04),-1,'',MyYaNoravmyfFra04)),
SUM(DECODE(SIGN(MyYaNoravmyfFra05),-1,'',MyYaNoravmyfFra05)),
SUM(DECODE(SIGN(MyYaNoravmyfFra06),-1,'',MyYaNoravmyfFra06)),
SUM(DECODE(SIGN(MyYaNoravmyfFra07),-1,'',MyYaNoravmyfFra07)),
SUM(DECODE(SIGN(MyYaNoravmyfFra08),-1,'',MyYaNoravmyfFra08)),
SUM(DECODE(SIGN(MyYaNoravmyfFra09),-1,'',MyYaNoravmyfFra09)),
SUM(DECODE(SIGN(MyYaNoravmyfFra10),-1,'',MyYaNoravmyfFra10)),
SUM(DECODE(SIGN(MyYaNoravmyfFra11),-1,'',MyYaNoravmyfFra11)),
SUM(DECODE(SIGN(MyYaNoravmyfFra12),-1,'',MyYaNoravmyfFra12)),
SUM(DECODE(SIGN(MyYaNoravmyfFra13),-1,'',MyYaNoravmyfFra13)),
SUM(DECODE(SIGN(MyYaNoravmyfFra14),-1,'',MyYaNoravmyfFra14)),
SUM(DECODE(SIGN(MyYaNoravmyfFra15),-1,'',MyYaNoravmyfFra15)),
SUM(DECODE(SIGN(MyYamigtumytr00), -1,'',MyYamigtumytr00)),
SUM(DECODE(SIGN(MyYamigtumytr01), -1,'',MyYamigtumytr01)),
SUM(DECODE(SIGN(MyYamigtumytr02), -1,'',MyYamigtumytr02)),
SUM(DECODE(SIGN(MyYamigtumytr03), -1,'',MyYamigtumytr03)),
SUM(DECODE(SIGN(MyYamigtumytr04), -1,'',MyYamigtumytr04)),
SUM(DECODE(SIGN(MyYamigtumytr05), -1,'',MyYamigtumytr05)),
SUM(DECODE(SIGN(MyYamigtumytr06), -1,'',MyYamigtumytr06)),
SUM(DECODE(SIGN(MyYamigtumytr07), -1,'',MyYamigtumytr07)),
SUM(DECODE(SIGN(MyYamigtumytr08), -1,'',MyYamigtumytr08)),
SUM(DECODE(SIGN(MyYamigtumytr09), -1,'',MyYamigtumytr09)),
SUM(DECODE(SIGN(MyYamigtumytr10), -1,'',MyYamigtumytr10)),
SUM(DECODE(SIGN(MyYamigtumytr11), -1,'',MyYamigtumytr11)),
SUM(DECODE(SIGN(MyYamigtumytr12), -1,'',MyYamigtumytr12)),
SUM(DECODE(SIGN(MyYamigtumytr13), -1,'',MyYamigtumytr13)),
SUM(DECODE(SIGN(MyYamigtumytr14), -1,'',MyYamigtumytr14)),
SUM(DECODE(SIGN(MyYamigtumytr15), -1,'',MyYamigtumytr15)),
SUM(DECODE(SIGN(MyYaSUMlolytr00), -1,'',MyYaSUMlolytr00)),
SUM(DECODE(SIGN(MyYaSUMlolytr01), -1,'',MyYaSUMlolytr01)),
SUM(DECODE(SIGN(MyYaSUMlolytr02), -1,'',MyYaSUMlolytr02)),
SUM(DECODE(SIGN(MyYaSUMlolytr03), -1,'',MyYaSUMlolytr03)),
SUM(DECODE(SIGN(MyYaSUMlolytr04), -1,'',MyYaSUMlolytr04)),
SUM(DECODE(SIGN(MyYaSUMlolytr05), -1,'',MyYaSUMlolytr05)),
SUM(DECODE(SIGN(MyYaSUMlolytr06), -1,'',MyYaSUMlolytr06)),
SUM(DECODE(SIGN(MyYaSUMlolytr07), -1,'',MyYaSUMlolytr07)),
SUM(DECODE(SIGN(MyYaSUMlolytr08), -1,'',MyYaSUMlolytr08)),
SUM(DECODE(SIGN(MyYaSUMlolytr09), -1,'',MyYaSUMlolytr09)),
SUM(DECODE(SIGN(MyYaSUMlolytr10), -1,'',MyYaSUMlolytr10)),
SUM(DECODE(SIGN(MyYaSUMlolytr11), -1,'',MyYaSUMlolytr11)),
SUM(DECODE(SIGN(MyYaSUMlolytr12), -1,'',MyYaSUMlolytr12)),
SUM(DECODE(SIGN(MyYaSUMlolytr13), -1,'',MyYaSUMlolytr13)),
SUM(DECODE(SIGN(MyYaSUMlolytr14), -1,'',MyYaSUMlolytr14)),
SUM(DECODE(SIGN(MyYaSUMlolytr15), -1,'',MyYaSUMlolytr15)),
SUM(DECODE(SIGN(MyYaSUMgrtytr00), -1,'',MyYaSUMgrtytr00)),
SUM(DECODE(SIGN(MyYaSUMgrtytr01), -1,'',MyYaSUMgrtytr01)),
SUM(DECODE(SIGN(MyYaSUMgrtytr02), -1,'',MyYaSUMgrtytr02)),
SUM(DECODE(SIGN(MyYaSUMgrtytr03), -1,'',MyYaSUMgrtytr03)),
SUM(DECODE(SIGN(MyYaSUMgrtytr04), -1,'',MyYaSUMgrtytr04)),
SUM(DECODE(SIGN(MyYaSUMgrtytr05), -1,'',MyYaSUMgrtytr05)),
SUM(DECODE(SIGN(MyYaSUMgrtytr06), -1,'',MyYaSUMgrtytr06)),
SUM(DECODE(SIGN(MyYaSUMgrtytr07), -1,'',MyYaSUMgrtytr07)),
SUM(DECODE(SIGN(MyYaSUMgrtytr08), -1,'',MyYaSUMgrtytr08)),
SUM(DECODE(SIGN(MyYaSUMgrtytr09), -1,'',MyYaSUMgrtytr09)),
SUM(DECODE(SIGN(MyYaSUMgrtytr10), -1,'',MyYaSUMgrtytr10)),
SUM(DECODE(SIGN(MyYaSUMgrtytr11), -1,'',MyYaSUMgrtytr11)),
SUM(DECODE(SIGN(MyYaSUMgrtytr12), -1,'',MyYaSUMgrtytr12)),
SUM(DECODE(SIGN(MyYaSUMgrtytr13), -1,'',MyYaSUMgrtytr13)),
SUM(DECODE(SIGN(MyYaSUMgrtytr14), -1,'',MyYaSUMgrtytr14)),
SUM(DECODE(SIGN(MyYaSUMgrtytr15), -1,'',MyYaSUMgrtytr15)),
SUM(DECODE(SIGN(MyYamigcfvw00),-1,'',MyYamigcfvw00)),
SUM(DECODE(SIGN(MyYamigcfvw01),-1,'',MyYamigcfvw01)),
SUM(DECODE(SIGN(MyYamigcfvw02),-1,'',MyYamigcfvw02)),
SUM(DECODE(SIGN(MyYamigcfvw03),-1,'',MyYamigcfvw03)),
SUM(DECODE(SIGN(MyYamigcfvw04),-1,'',MyYamigcfvw04)),
SUM(DECODE(SIGN(MyYamigcfvw05),-1,'',MyYamigcfvw05)),
SUM(DECODE(SIGN(MyYamigcfvw06),-1,'',MyYamigcfvw06)),
SUM(DECODE(SIGN(MyYamigcfvw07),-1,'',MyYamigcfvw07)),
SUM(DECODE(SIGN(MyYamigcfvw08),-1,'',MyYamigcfvw08)),
SUM(DECODE(SIGN(MyYamigcfvw09),-1,'',MyYamigcfvw09)),
SUM(DECODE(SIGN(MyYamigcfvw10),-1,'',MyYamigcfvw10)),
SUM(DECODE(SIGN(MyYamigcfvw11),-1,'',MyYamigcfvw11)),
SUM(DECODE(SIGN(MyYamigcfvw12),-1,'',MyYamigcfvw12)),
SUM(DECODE(SIGN(MyYamigcfvw13),-1,'',MyYamigcfvw13)),
SUM(DECODE(SIGN(MyYamigcfvw14),-1,'',MyYamigcfvw14)),
SUM(DECODE(SIGN(MyYamigcfvw15),-1,'',MyYamigcfvw15)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr00), -1,'',MyYaSUMNoOfcfsytr00)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr01), -1,'',MyYaSUMNoOfcfsytr01)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr02), -1,'',MyYaSUMNoOfcfsytr02)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr03), -1,'',MyYaSUMNoOfcfsytr03)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr04), -1,'',MyYaSUMNoOfcfsytr04)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr05), -1,'',MyYaSUMNoOfcfsytr05)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr06), -1,'',MyYaSUMNoOfcfsytr06)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr07), -1,'',MyYaSUMNoOfcfsytr07)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr08), -1,'',MyYaSUMNoOfcfsytr08)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr09), -1,'',MyYaSUMNoOfcfsytr09)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr10), -1,'',MyYaSUMNoOfcfsytr10)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr11), -1,'',MyYaSUMNoOfcfsytr11)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr12), -1,'',MyYaSUMNoOfcfsytr12)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr13), -1,'',MyYaSUMNoOfcfsytr13)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr14), -1,'',MyYaSUMNoOfcfsytr14)),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr15), -1,'',MyYaSUMNoOfcfsytr15)),
SUM(DECODE(SIGN(MyYamiiitum00),-1,'',MyYamiiitum00)),
SUM(DECODE(SIGN(MyYamiiitum01),-1,'',MyYamiiitum01)),
SUM(DECODE(SIGN(MyYamiiitum02),-1,'',MyYamiiitum02)),
SUM(DECODE(SIGN(MyYamiiitum03),-1,'',MyYamiiitum03)),
SUM(DECODE(SIGN(MyYamiiitum04),-1,'',MyYamiiitum04)),
SUM(DECODE(SIGN(MyYamiiitum05),-1,'',MyYamiiitum05)),
SUM(DECODE(SIGN(MyYamiiitum06),-1,'',MyYamiiitum06)),
SUM(DECODE(SIGN(MyYamiiitum07),-1,'',MyYamiiitum07)),
SUM(DECODE(SIGN(MyYamiiitum08),-1,'',MyYamiiitum08)),
SUM(DECODE(SIGN(MyYamiiitum09),-1,'',MyYamiiitum09)),
SUM(DECODE(SIGN(MyYamiiitum10),-1,'',MyYamiiitum10)),
SUM(DECODE(SIGN(MyYamiiitum11),-1,'',MyYamiiitum11)),
SUM(DECODE(SIGN(MyYamiiitum12),-1,'',MyYamiiitum12)),
SUM(DECODE(SIGN(MyYamiiitum13),-1,'',MyYamiiitum13)),
SUM(DECODE(SIGN(MyYamiiitum14),-1,'',MyYamiiitum14)),
SUM(DECODE(SIGN(MyYamiiitum15),-1,'',MyYamiiitum15)),
SUM(DECODE(SIGN(Cart),-1,'',Cart)),
SUM(DECODE(SIGN(Carg),-1,'',Carg)),
SUM(DECODE(SIGN(Carw), -1,'',Carw)),
SUM(DECODE(SIGN(Cars), -1,'',Cars)),
SUM(DECODE(SIGN(Carx),-1,'',Carx)),
SUM(DECODE(SIGN(Cara), -1,'',Cara)),
SUM(DECODE(SIGN(Carxs), -1,'',Carxs)),
SUM(DECODE(SIGN(Carq),-1,'',Carq)),
SUM(DECODE(SIGN(Carp),-1,'',Carp)),
SUM(DECODE(SIGN(Cark),-1,'',Cark)),
SUM(DECODE(SIGN(Carg), -1,'',Carg)),
SUM(DECODE(SIGN(Carn), -1,'',Carn)),
SUM(DECODE(SIGN(CarYgh), -1,'',CarYgh)),
SUM(DECODE(SIGN(Carty), -1,'',Carty)),
SUM(DECODE(SIGN(Carzx), -1,'',Carzx)),
SUM(DECODE(SIGN(asdef), -1,'',asdef)),
SUM(DECODE(SIGN(toyYaIncup), -1,'',toyYaIncup)),
SUM(DECODE(SIGN(toyYaInLostcup), -1,'',toyYaInLostcup)),
SUM(DECODE(SIGN(toyYaInOutOfwcup),-1,'',toyYaInOutOfwcup)),
SUM(DECODE(SIGN(toyYaOutcup), -1,'',toyYaOutcup)),
SUM(DECODE(SIGN(manYaNoddSdulk128), -1,'',manYaNoddSdulk128)),
SUM(DECODE(SIGN(manYaNoddSdulk256), -1,'',manYaNoddSdulk256)),
SUM(DECODE(SIGN(manYaNoddSdulk64), -1,'',manYaNoddSdulk64)),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwm128),-1,'',fudYaDlfd12PsStrMwm128)),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwm256),-1,'',fudYaDlfd12PsStrMwm256)),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwms64),-1,'',fudYaDlfd12PsStrMwms64)),
SUM(DECODE(SIGN(fudYaMwmsghCongTo), -1,'',fudYaMwmsghCongTo)),
SUM(DECODE(SIGN(fudYaMwmscttntodef), -1,'',fudYaMwmscttntodef)),
SUM(DECODE(SIGN(fudYaMwmscttntoMan), -1,'',fudYaMwmscttntoMan)),
SUM(DECODE(SIGN(fudYaNoamMwms09),-1,'',fudYaNoamMwms09)),
SUM(DECODE(SIGN(fudYaNoFldMwmsSesLackRnRe),-1,'',fudYaNoFldMwmsSesLackRnRe)),
SUM(DECODE(SIGN(fudYaNoFldMwmsSesLackTnRe),-1,'',fudYaNoFldMwmsSesLackTnRe)),
SUM(DECODE(SIGN(fudYaNoqessMwms09),-1,'',fudYaNoqessMwms09)),
SUM(DECODE(SIGN(fudYaNoqMwmsSesrr), -1,'',fudYaNoqMwmsSesrr)),
SUM(DECODE(SIGN(fudYaNoteMwmsSesStop), -1,'',fudYaNoteMwmsSesStop)),
SUM(DECODE(SIGN(fudYaslesMwmslg), -1,'',fudYaslesMwmslg)),
SUM(DECODE(SIGN(fudYaslesPsStrMwms64Rl),-1,'',fudYaslesPsStrMwms64Rl)),
SUM(DECODE(SIGN(fudYasPsStrMwms128RlcU),-1,'',fudYasPsStrMwms128RlcU)),
SUM(DECODE(SIGN(fudYasPsStrMwms256RlcU),-1,'',fudYasPsStrMwms256RlcU)),
SUM(DECODE(SIGN(fudYamiwmslg), -1,'',fudYamiwmslg)),
SUM(DECODE(SIGN(fudYamisStrMwms128RlcUs),-1,'',fudYamisStrMwms128RlcUs)),
SUM(DECODE(SIGN(fudYamisStrMwms256RlcUs),-1,'',fudYamisStrMwms256RlcUs)),
SUM(DECODE(SIGN(fudYamisStrMwms64RlcUse),-1,'',fudYamisStrMwms64RlcUse)),
SUM(DECODE(SIGN(cosYaAgpsam), -1,'',cosYaAgpsam)),
SUM(DECODE(SIGN(cosYaAgpsqQosNotOk), -1,'',cosYaAgpsqQosNotOk)),
SUM(DECODE(SIGN(cosYaAgpsqQosOk), -1,'',cosYaAgpsqQosOk)),
SUM(DECODE(SIGN(cosYaghIdam), -1,'',cosYaghIdam)),
SUM(DECODE(SIGN(cosYaghIdqQosNotOk),-1,'',cosYaghIdqQosNotOk)),
SUM(DECODE(SIGN(cosYaghIdqQosOk), -1,'',cosYaghIdqQosOk)),
SUM(DECODE(SIGN(cosYaRttam), -1,'',cosYaRttam)),
SUM(DECODE(SIGN(cosYaRttqQosNotOk), -1,'',cosYaRttqQosNotOk)),
SUM(DECODE(SIGN(cosYaRttqQosOk), -1,'',cosYaRttqQosOk)),
SUM(DECODE(SIGN(app_YaFaultycrwlocks), -1,'',app_YaFaultycrwlocks)),
SUM(DECODE(SIGN(app_YaFrmNoOfDiscappcup), -1,'',app_YaFrmNoOfDiscappcup)),
SUM(DECODE(SIGN(app_YaNoRecsheAccqess), -1,'',app_YaNoRecsheAccqess)),
SUM(DECODE(SIGN(app_Yacrwlocks), -1,'',app_Yacrwlocks)),
SUM(DECODE(SIGN(galAttNonloveIeFqHoCsC_00), -1,'',galAttNonloveIeFqHoCsC_00)),
SUM(DECODE(SIGN(galAttNonloveIeFqHoCsS_00), -1,'',galAttNonloveIeFqHoCsS_00)),
SUM(DECODE(SIGN(galAttNonloveIeFqHoPsI_00), -1,'',galAttNonloveIeFqHoPsI_00)),
SUM(DECODE(SIGN(galAttNonloveIeFqHoPsI_01), -1,'',galAttNonloveIeFqHoPsI_01)),
SUM(DECODE(SIGN(galAttNonloveIeFqHoStr_00), -1,'',galAttNonloveIeFqHoStr_00)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoFa_00), -1,'',galFlNonloveIeFqHoFa_00)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoFa_01), -1,'',galFlNonloveIeFqHoFa_01)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoFa_02), -1,'',galFlNonloveIeFqHoFa_02)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoFa_03), -1,'',galFlNonloveIeFqHoFa_03)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoFa_04), -1,'',galFlNonloveIeFqHoFa_04)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoRe_00), -1,'',galFlNonloveIeFqHoRe_00)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoRe_01), -1,'',galFlNonloveIeFqHoRe_01)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoRe_02), -1,'',galFlNonloveIeFqHoRe_02)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoRe_03), -1,'',galFlNonloveIeFqHoRe_03)),
SUM(DECODE(SIGN(galFlNonloveIeFqHoRe_04), -1,'',galFlNonloveIeFqHoRe_04)),
SUM(DECODE(SIGN(galNoAttOCnhhoCsNonmannj), -1,'',galNoAttOCnhhoCsNonmannj)),
SUM(DECODE(SIGN(galNoAttOCnhhoPsdeeRe_00), -1,'',galNoAttOCnhhoPsdeeRe_00)),
SUM(DECODE(SIGN(galNoAttOutCnhhomannj), -1,'',galNoAttOutCnhhomannj)),
SUM(DECODE(SIGN(galNoqOCnhhoCsNonmannj),-1,'',galNoqOCnhhoCsNonmannj)),
SUM(DECODE(SIGN(galNoqOutCnhhomannj), -1,'',galNoqOutCnhhomannj)),
SUM(DECODE(SIGN(galRlAddwtswestghC_00), -1,'',galRlAddwtswestghC_00)),
SUM(DECODE(SIGN(galRlAddwtswestghP_00), -1,'',galRlAddwtswestghP_00)),
SUM(DECODE(SIGN(galRlAddwtswestghP_01), -1,'',galRlAddwtswestghP_01)),
SUM(DECODE(SIGN(galRlAddwtswestgk_00), -1,'',galRlAddwtswestgk_00)),
SUM(DECODE(SIGN(galRlAddwtswestgk_01), -1,'',galRlAddwtswestgk_01)),
SUM(DECODE(SIGN(galRlAddwtswestgk_02), -1,'',galRlAddwtswestgk_02)),
SUM(DECODE(SIGN(galRlAddqwestghCs_00), -1,'',galRlAddqwestghCs_00)),
SUM(DECODE(SIGN(galRlAddqwestghPk_00), -1,'',galRlAddqwestghPk_00)),
SUM(DECODE(SIGN(galRlAddqwestghPk_01), -1,'',galRlAddqwestghPk_01)),
SUM(DECODE(SIGN(galRlAddqwestgkp_00), -1,'',galRlAddqwestgkp_00)),
SUM(DECODE(SIGN(galRlAddqwestgkt_00), -1,'',galRlAddqwestgkt_00)),
SUM(DECODE(SIGN(galRlAddqwestgkt_01), -1,'',galRlAddqwestgkt_01)),
SUM(DECODE(SIGN(galqNonloveIeFqHoCs_00), -1,'',galqNonloveIeFqHoCs_00)),
SUM(DECODE(SIGN(galqNonloveIeFqHoCs_01), -1,'',galqNonloveIeFqHoCs_01)),
SUM(DECODE(SIGN(galqNonloveIeFqHoPs_00), -1,'',galqNonloveIeFqHoPs_00)),
SUM(DECODE(SIGN(galqNonloveIeFqHoPs_01), -1,'',galqNonloveIeFqHoPs_01)),
SUM(DECODE(SIGN(galqNonloveIeFqHoSt_00), -1,'',galqNonloveIeFqHoSt_00)),
SUM(DECODE(SIGN(smleYaIfInOctetsHi), -1,'',smleYaIfInOctetsHi)),
SUM(DECODE(SIGN(smleYaIfInOctetsLo), -1,'',smleYaIfInOctetsLo)),
SUM(DECODE(SIGN(smleYaIfInUnknownProtos), -1,'',smleYaIfInUnknownProtos)),
SUM(DECODE(SIGN(smleYaIfOutOctetsHi), -1,'',smleYaIfOutOctetsHi)),
SUM(DECODE(SIGN(smleYaIfOutOctetsLo), -1,'',smleYaIfOutOctetsLo)),
SUM(DECODE(SIGN(greenew), -1,'',greenew)),
SUM(DECODE(SIGN(redAttk),-1,'',redAttk)),
SUM(DECODE(SIGN(mannjRetrnO_00), -1,'',mannjRetrnO_00)),
SUM(DECODE(SIGN(mannjRetrnO_01), -1,'',mannjRetrnO_01)),
SUM(DECODE(SIGN(mannjqessew),-1,'',mannjqessew)),
SUM(DECODE(SIGN(mannjqessk), -1,'',mannjqessk)),
SUM(DECODE(SIGN(foolYaNordSawYasgs), -1,'',foolYaNordSawYasgs)),
SUM(DECODE(SIGN(foolYaNohmmedTcpdee), -1,'',foolYaNohmmedTcpdee)),
SUM(DECODE(SIGN(foolYaNoSentSawYasgs), -1,'',foolYaNoSentSawYasgs)),
SUM(DECODE(SIGN(galAttNonctIfhoPsIntew),-1,'',galAttNonctIfhoPsIntew)),
SUM(DECODE(SIGN(galAttNonctIfhoPsIntk), -1,'',galAttNonctIfhoPsIntk)),
SUM(DECODE(SIGN(galAttNonctIfhoPsStrk), -1,'',galAttNonctIfhoPsStrk)),
SUM(DECODE(SIGN(galFlNonloveIfhoFlRe_00), -1,'',galFlNonloveIfhoFlRe_00)),
SUM(DECODE(SIGN(galFlNonloveIfhoFlRe_01), -1,'',galFlNonloveIfhoFlRe_01)),
SUM(DECODE(SIGN(galFlNonloveIfhoFlRe_02), -1,'',galFlNonloveIfhoFlRe_02)),
SUM(DECODE(SIGN(galFlNonloveIfhoRevPsI_00), -1,'',galFlNonloveIfhoRevPsI_00)),
SUM(DECODE(SIGN(galFlNonloveIfhoRevPsIntk),-1,'',galFlNonloveIfhoRevPsIntk)),
SUM(DECODE(SIGN(galFlNonloveIfhoRevPsStrk),-1,'',galFlNonloveIfhoRevPsStrk)),
SUM(DECODE(SIGN(galqNonloveIfhoPsIntew),-1,'',galqNonloveIfhoPsIntew)),
SUM(DECODE(SIGN(galqNonctIfhoPsIntk),-1,'',galqNonctIfhoPsIntk)),
SUM(DECODE(SIGN(galqNonctIfhoPsStrk),-1,'',galqNonctIfhoPsStrk)),
SUM(DECODE(SIGN(MyYapptRejHwaschd), -1,'',MyYapptRejHwaschd)),
SUM(DECODE(SIGN(MyYaCtypptAttaschd),-1,'',MyYaCtypptAttaschd)),
SUM(DECODE(SIGN(MyYaCtypptAttkPds_00), -1,'',MyYaCtypptAttkPds_00)),
SUM(DECODE(SIGN(MyYaCtypptRejaschd),-1,'',MyYaCtypptRejaschd)),
SUM(DECODE(SIGN(MyYaCtypptRejkPds_00), -1,'',MyYaCtypptRejkPds_00)),
SUM(DECODE(SIGN(MyYaslesCtyaschd), -1,'',MyYaslesCtyaschd)),
SUM(DECODE(SIGN(MyYasCtyfrndjk), -1,'',MyYasCtyfrndjk)),
SUM(DECODE(SIGN(MyYamischd),-1,'',MyYamischd)),
SUM(DECODE(SIGN(MyYamityfrndjk), -1,'',MyYamityfrndjk)),
SUM(DECODE(SIGN(ladyCtypptAttServqad),-1,'',ladyCtypptAttServqad)),
SUM(DECODE(SIGN(ladyCtypptRejServqad),-1,'',ladyCtypptRejServqad)),
SUM(DECODE(SIGN(ladyNoActv10msItvlewTti10),-1,'',ladyNoActv10msItvlewTti10)),
SUM(DECODE(SIGN(YaNo),-1,'',YaNo)),
SUM(DECODE(SIGN(ladyNo1), -1,'',ladyNo1)),
SUM(DECODE(SIGN(ladyNo2), -1,'',ladyNo2)),
SUM(DECODE(SIGN(ladys), -1,'',ladys)),
SUM(DECODE(SIGN(lady00), -1,'',lady00)),
SUM(DECODE(SIGN(lady01), -1,'',lady01)),
SUM(DECODE(SIGN(ladySUM),-1,'',ladySUM)),
SUM(DECODE(SIGN(ladySUM00), -1,'',ladySUM00)),
SUM(DECODE(SIGN(ladySUM01), -1,'',ladySUM01)),
SUM(DECODE(SIGN(ladySUM),-1,'',ladySUM)),
SUM(DECODE(SIGN(NoYaAttLwhomannj), -1,'',NoYaAttLwhomannj)),
SUM(DECODE(SIGN(HiYaFlLwho), -1,'',HiYaFlLwho)),
SUM(DECODE(SIGN(HiYaFlLwho5), -1,'',HiYaFlLwho5)),
SUM(DECODE(SIGN(HiYaFlLwho500), -1,'',HiYaFlLwho500)),
SUM(DECODE(SIGN(HiYaFlLwho5), -1,'',HiYaFlLwho5)),
SUM(DECODE(SIGN(NoYaqLwhomannj), -1,'',NoYaqLwhomannj)),
SUM(DECODE(SIGN(gal6), -1,'',gal6)),
SUM(DECODE(SIGN(gal55), -1,'',gal55)),
SUM(DECODE(SIGN(gal4), -1,'',gal4)),
SUM(DECODE(SIGN(gal3), -1,'',gal3)),
SUM(DECODE(SIGN(galN1),-1,'',galN1)),
SUM(DECODE(SIGN(gal2), -1,'',gal2)),
SUM(DECODE(SIGN(Tool),-1,'',Tool)),
SUM(DECODE(SIGN(MyYaslehj), -1,'',MyYaslehj)),
SUM(DECODE(SIGN(aruhgDl),-1,'',aruhgDl)),
SUM(DECODE(SIGN(aruhgUl),-1,'',aruhgUl)),
SUM(DECODE(SIGN(MyYamigtumPqytr00), -1,'',MyYamigtumPqytr00)),
SUM(DECODE(SIGN(MyYamigtumPqytr01), -1,'',MyYamigtumPqytr01)),
SUM(DECODE(SIGN(MyYamigtumPqytr02), -1,'',MyYamigtumPqytr02)),
SUM(DECODE(SIGN(MyYamigtumPqytr03), -1,'',MyYamigtumPqytr03)),
SUM(DECODE(SIGN(MyYamigtumPqytr04), -1,'',MyYamigtumPqytr04)),
SUM(DECODE(SIGN(MyYamigtumPqytr05), -1,'',MyYamigtumPqytr05)),
SUM(DECODE(SIGN(MyYamigtumPqytr06), -1,'',MyYamigtumPqytr06)),
SUM(DECODE(SIGN(MyYamigtumPqytr07), -1,'',MyYamigtumPqytr07)),
SUM(DECODE(SIGN(MyYamigtumPqytr08), -1,'',MyYamigtumPqytr08)),
SUM(DECODE(SIGN(MyYamigtumPqytr09), -1,'',MyYamigtumPqytr09)),
SUM(DECODE(SIGN(MyYamigtumPqytr10), -1,'',MyYamigtumPqytr10)),
SUM(DECODE(SIGN(MyYamigtumPqytr11), -1,'',MyYamigtumPqytr11)),
SUM(DECODE(SIGN(MyYamigtumPqytr12), -1,'',MyYamigtumPqytr12)),
SUM(DECODE(SIGN(MyYamigtumPqytr13), -1,'',MyYamigtumPqytr13)),
SUM(DECODE(SIGN(MyYamigtumPqytr14), -1,'',MyYamigtumPqytr14)),
SUM(DECODE(SIGN(MyYamigtumPqytr15), -1,'',MyYamigtumPqytr15)),
SUM(DECODE(SIGN(MyYamii), -1,'',MyYamii)),
SUM(DECODE(SIGN(MyYamis), -1,'',MyYamis)),
SUM(DECODE(SIGN(MyYamie00),-1,'',MyYamie00)),
SUM(DECODE(SIGN(MyYamie01),-1,'',MyYamie01)),
SUM(DECODE(SIGN(MyYamie02),-1,'',MyYamie02)),
SUM(DECODE(SIGN(MyYamie03),-1,'',MyYamie03)),
SUM(DECODE(SIGN(MyYamie04),-1,'',MyYamie04)),
SUM(DECODE(SIGN(MyYamie05),-1,'',MyYamie05)),
SUM(DECODE(SIGN(MyYamie06),-1,'',MyYamie06)),
SUM(DECODE(SIGN(MyYamie07),-1,'',MyYamie07)),
SUM(DECODE(SIGN(MyYamie08),-1,'',MyYamie08)),
SUM(DECODE(SIGN(MyYamie09),-1,'',MyYamie09)),
SUM(DECODE(SIGN(MyYamie10),-1,'',MyYamie10)),
SUM(DECODE(SIGN(MyYamie11),-1,'',MyYamie11)),
SUM(DECODE(SIGN(MyYamie12),-1,'',MyYamie12)),
SUM(DECODE(SIGN(MyYamie13),-1,'',MyYamie13)),
SUM(DECODE(SIGN(MyYamie14),-1,'',MyYamie14)),
SUM(DECODE(SIGN(MyYamie15),-1,'',MyYamie15)),
SUM(DECODE(SIGN(MyYamij), -1,'',MyYamij)),
SUM(DECODE(SIGN(sacsledghDljk), -1,'',sacsledghDljk)),
SUM(DECODE(SIGN(Salmon),-1,'',Salmon)),
SUM(DECODE(SIGN(Alloy),-1,'',Alloy)),
SUM(DECODE(SIGN(Lemon),-1,'',Lemon)),
SUM(DECODE(SIGN(Dolph),-1,'',Dolph)),
SUM(DECODE(SIGN(Halw),-1,'',Halw)),
SUM(DECODE(SIGN(Coc),-1,'',Coc)),
SUM(DECODE(SIGN(Nut),-1,'',Nut)),
SUM(DECODE(SIGN(Smily),-1,'',Smily)),
SUM(DECODE(SIGN(Cosm),-1,'',Cosm)),
SUM(DECODE(SIGN(Loly),-1,'',Loly)),
SUM(DECODE(SIGN(Gold),-1,'',Gold)),
SUM(DECODE(SIGN(Silvy), -1,'',Silvy)),
SUM(DECODE(SIGN(Honey), -1,'',Honey))
FROM Value
GROUP by MSD
Also i got the below point from a site:
ORA-01467: sort key too long
Cause: A DISTINCT, GROUP BY, ORDER BY, or SET operation requires a sort key longer than that supported by Oracle. Either too many columns or too many group functions were specified in the SELECT statement.
Action: Reduce the number of columns or group functions involved in the operation.
However i am able to run the same query on a different table with almost double the number of columns.
Can anyone please help me in figuring out the actual cause of this error and the solution.
Thanks in advance,
ArunWell, as I already mentioned, there is no way to fit GROUP BY columns and all non distinct data aggregates into a single Otacle block. So I suggest to replace GROUP BY with analytic functions. I tested it and it works. I can not fit whole statement, since forum message limit it 30000 characters, so I will remove some trailing select list expressions. They all follow same pattern anyway:
SELECT DISTINCT MSD,
1,
SUM(FLAG) OVER(PARTITION BY MSD),
DECODE(SUM(FLAGCOLOR) OVER(PARTITION BY MSD),0,0,1),
SUM(DECODE(SIGN(Tiefool), -1,to_number(null),Tiefool)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Tiegreen), -1,to_number(null),Tiegreen)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(TiesacTotaru), -1,to_number(null),TiesacTotaru)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Tiesaccfaru), -1,to_number(null),Tiesaccfaru)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Tiel), -1,to_number(null),Tiel)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Tiemannj), -1,to_number(null),Tiemannj)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNo57), -1,to_number(null),HiYaNo57)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoAttOIRHoLad), -1,to_number(null),HiYaNoAttOIRHoLad)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoAttOIRHomannj), -1,to_number(null),HiYaNoAttOIRHomannj)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoAttOIRHosmrlone), -1,to_number(null),HiYaNoAttOIRHosmrlone)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoAttOSwHomannj), -1,to_number(null),HiYaNoAttOSwHomannj)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57jFlr),-1,to_number(null),HiYaNoFlOIRHoCs57jFlr)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Re_00), -1,to_number(null),HiYaNoFlOIRHoCs57Re_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Re_01), -1,to_number(null),HiYaNoFlOIRHoCs57Re_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoCs57Ue_00), -1,to_number(null),HiYaNoFlOIRHoCs57Ue_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadG_00), -1,to_number(null),HiYaNoFlOIRHoLadG_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadR_00), -1,to_number(null),HiYaNoFlOIRHoLadR_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadR_01), -1,to_number(null),HiYaNoFlOIRHoLadR_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHoLadU_00), -1,to_number(null),HiYaNoFlOIRHoLadU_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_00), -1,to_number(null),HiYaNoFlOIRHomannj_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_01), -1,to_number(null),HiYaNoFlOIRHomannj_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_02), -1,to_number(null),HiYaNoFlOIRHomannj_02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHomannj_03), -1,to_number(null),HiYaNoFlOIRHomannj_03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_00), -1,to_number(null),HiYaNoFlOIRHosmr_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_01), -1,to_number(null),HiYaNoFlOIRHosmr_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_02), -1,to_number(null),HiYaNoFlOIRHosmr_02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOIRHosmr_03), -1,to_number(null),HiYaNoFlOIRHosmr_03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_00), -1,to_number(null),HiYaNoFlOSwHomannj_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_01), -1,to_number(null),HiYaNoFlOSwHomannj_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_02), -1,to_number(null),HiYaNoFlOSwHomannj_02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoFlOSwHomannj_03), -1,to_number(null),HiYaNoFlOSwHomannj_03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRCckOldCh), -1,to_number(null),HiYaNoOIRCckOldCh)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRCcq), -1,to_number(null),HiYaNoOIRCcq)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRHocAl_00), -1,to_number(null),HiYaNoOIRHocAl_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRHokOldC_00), -1,to_number(null),HiYaNoOIRHokOldC_00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRHokOldC_01), -1,to_number(null),HiYaNoOIRHokOldC_01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoOIRHoq), -1,to_number(null),HiYaNoOIRHoq)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYatoyCs57), -1,to_number(null),HiYatoyCs57)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYatoyLad), -1,to_number(null),HiYatoyLad)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYatoymannj), -1,to_number(null),HiYatoymannj)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYatoysmrlone),-1,to_number(null),HiYatoysmrlone)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(HiYaNoplymannj), -1,to_number(null),HiYaNoplymannj)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(redAtt), -1,to_number(null),redAtt)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(NoYaNoOutIratHoAtt), -1,to_number(null),NoYaNoOutIratHoAtt)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYakcttntodef), -1,to_number(null),vavaYakcttntodef)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYakcttntoMan), -1,to_number(null),vavaYakcttntoMan)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYaNoddvac), -1,to_number(null),vavaYaNoddvac)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYaNordvac), -1,to_number(null),vavaYaNordvac)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYasalRlcTotPktThp), -1,to_number(null),vavaYasalRlcTotPktThp)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYasalRlccfPktThp),-1,to_number(null),vavaYasalRlccfPktThp)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYamilRlcTotPktThp), -1,to_number(null),vavaYamilRlcTotPktThp)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(vavaYamilRlccfPktThp), -1,to_number(null),vavaYamilRlccfPktThp)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr00),-1,to_number(null),MyYaNoauwcupytr00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr01),-1,to_number(null),MyYaNoauwcupytr01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr02),-1,to_number(null),MyYaNoauwcupytr02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr03),-1,to_number(null),MyYaNoauwcupytr03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr04),-1,to_number(null),MyYaNoauwcupytr04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr05),-1,to_number(null),MyYaNoauwcupytr05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr06),-1,to_number(null),MyYaNoauwcupytr06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr07),-1,to_number(null),MyYaNoauwcupytr07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr08),-1,to_number(null),MyYaNoauwcupytr08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr09),-1,to_number(null),MyYaNoauwcupytr09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr10),-1,to_number(null),MyYaNoauwcupytr10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr11),-1,to_number(null),MyYaNoauwcupytr11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr12),-1,to_number(null),MyYaNoauwcupytr12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr13),-1,to_number(null),MyYaNoauwcupytr13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr14),-1,to_number(null),MyYaNoauwcupytr14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoauwcupytr15),-1,to_number(null),MyYaNoauwcupytr15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra00),-1,to_number(null),MyYaNoravmyfFra00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra01),-1,to_number(null),MyYaNoravmyfFra01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra02),-1,to_number(null),MyYaNoravmyfFra02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra03),-1,to_number(null),MyYaNoravmyfFra03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra04),-1,to_number(null),MyYaNoravmyfFra04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra05),-1,to_number(null),MyYaNoravmyfFra05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra06),-1,to_number(null),MyYaNoravmyfFra06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra07),-1,to_number(null),MyYaNoravmyfFra07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra08),-1,to_number(null),MyYaNoravmyfFra08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra09),-1,to_number(null),MyYaNoravmyfFra09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra10),-1,to_number(null),MyYaNoravmyfFra10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra11),-1,to_number(null),MyYaNoravmyfFra11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra12),-1,to_number(null),MyYaNoravmyfFra12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra13),-1,to_number(null),MyYaNoravmyfFra13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra14),-1,to_number(null),MyYaNoravmyfFra14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaNoravmyfFra15),-1,to_number(null),MyYaNoravmyfFra15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr00), -1,to_number(null),MyYamigtumytr00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr01), -1,to_number(null),MyYamigtumytr01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr02), -1,to_number(null),MyYamigtumytr02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr03), -1,to_number(null),MyYamigtumytr03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr04), -1,to_number(null),MyYamigtumytr04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr05), -1,to_number(null),MyYamigtumytr05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr06), -1,to_number(null),MyYamigtumytr06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr07), -1,to_number(null),MyYamigtumytr07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr08), -1,to_number(null),MyYamigtumytr08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr09), -1,to_number(null),MyYamigtumytr09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr10), -1,to_number(null),MyYamigtumytr10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr11), -1,to_number(null),MyYamigtumytr11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr12), -1,to_number(null),MyYamigtumytr12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr13), -1,to_number(null),MyYamigtumytr13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr14), -1,to_number(null),MyYamigtumytr14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigtumytr15), -1,to_number(null),MyYamigtumytr15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr00), -1,to_number(null),MyYaSUMlolytr00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr01), -1,to_number(null),MyYaSUMlolytr01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr02), -1,to_number(null),MyYaSUMlolytr02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr03), -1,to_number(null),MyYaSUMlolytr03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr04), -1,to_number(null),MyYaSUMlolytr04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr05), -1,to_number(null),MyYaSUMlolytr05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr06), -1,to_number(null),MyYaSUMlolytr06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr07), -1,to_number(null),MyYaSUMlolytr07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr08), -1,to_number(null),MyYaSUMlolytr08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr09), -1,to_number(null),MyYaSUMlolytr09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr10), -1,to_number(null),MyYaSUMlolytr10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr11), -1,to_number(null),MyYaSUMlolytr11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr12), -1,to_number(null),MyYaSUMlolytr12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr13), -1,to_number(null),MyYaSUMlolytr13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr14), -1,to_number(null),MyYaSUMlolytr14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMlolytr15), -1,to_number(null),MyYaSUMlolytr15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr00), -1,to_number(null),MyYaSUMgrtytr00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr01), -1,to_number(null),MyYaSUMgrtytr01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr02), -1,to_number(null),MyYaSUMgrtytr02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr03), -1,to_number(null),MyYaSUMgrtytr03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr04), -1,to_number(null),MyYaSUMgrtytr04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr05), -1,to_number(null),MyYaSUMgrtytr05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr06), -1,to_number(null),MyYaSUMgrtytr06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr07), -1,to_number(null),MyYaSUMgrtytr07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr08), -1,to_number(null),MyYaSUMgrtytr08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr09), -1,to_number(null),MyYaSUMgrtytr09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr10), -1,to_number(null),MyYaSUMgrtytr10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr11), -1,to_number(null),MyYaSUMgrtytr11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr12), -1,to_number(null),MyYaSUMgrtytr12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr13), -1,to_number(null),MyYaSUMgrtytr13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr14), -1,to_number(null),MyYaSUMgrtytr14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMgrtytr15), -1,to_number(null),MyYaSUMgrtytr15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw00),-1,to_number(null),MyYamigcfvw00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw01),-1,to_number(null),MyYamigcfvw01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw02),-1,to_number(null),MyYamigcfvw02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw03),-1,to_number(null),MyYamigcfvw03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw04),-1,to_number(null),MyYamigcfvw04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw05),-1,to_number(null),MyYamigcfvw05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw06),-1,to_number(null),MyYamigcfvw06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw07),-1,to_number(null),MyYamigcfvw07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw08),-1,to_number(null),MyYamigcfvw08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw09),-1,to_number(null),MyYamigcfvw09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw10),-1,to_number(null),MyYamigcfvw10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw11),-1,to_number(null),MyYamigcfvw11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw12),-1,to_number(null),MyYamigcfvw12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw13),-1,to_number(null),MyYamigcfvw13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw14),-1,to_number(null),MyYamigcfvw14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamigcfvw15),-1,to_number(null),MyYamigcfvw15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr00), -1,to_number(null),MyYaSUMNoOfcfsytr00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr01), -1,to_number(null),MyYaSUMNoOfcfsytr01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr02), -1,to_number(null),MyYaSUMNoOfcfsytr02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr03), -1,to_number(null),MyYaSUMNoOfcfsytr03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr04), -1,to_number(null),MyYaSUMNoOfcfsytr04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr05), -1,to_number(null),MyYaSUMNoOfcfsytr05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr06), -1,to_number(null),MyYaSUMNoOfcfsytr06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr07), -1,to_number(null),MyYaSUMNoOfcfsytr07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr08), -1,to_number(null),MyYaSUMNoOfcfsytr08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr09), -1,to_number(null),MyYaSUMNoOfcfsytr09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr10), -1,to_number(null),MyYaSUMNoOfcfsytr10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr11), -1,to_number(null),MyYaSUMNoOfcfsytr11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr12), -1,to_number(null),MyYaSUMNoOfcfsytr12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr13), -1,to_number(null),MyYaSUMNoOfcfsytr13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr14), -1,to_number(null),MyYaSUMNoOfcfsytr14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYaSUMNoOfcfsytr15), -1,to_number(null),MyYaSUMNoOfcfsytr15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum00),-1,to_number(null),MyYamiiitum00)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum01),-1,to_number(null),MyYamiiitum01)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum02),-1,to_number(null),MyYamiiitum02)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum03),-1,to_number(null),MyYamiiitum03)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum04),-1,to_number(null),MyYamiiitum04)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum05),-1,to_number(null),MyYamiiitum05)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum06),-1,to_number(null),MyYamiiitum06)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum07),-1,to_number(null),MyYamiiitum07)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum08),-1,to_number(null),MyYamiiitum08)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum09),-1,to_number(null),MyYamiiitum09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum10),-1,to_number(null),MyYamiiitum10)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum11),-1,to_number(null),MyYamiiitum11)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum12),-1,to_number(null),MyYamiiitum12)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum13),-1,to_number(null),MyYamiiitum13)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum14),-1,to_number(null),MyYamiiitum14)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(MyYamiiitum15),-1,to_number(null),MyYamiiitum15)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Cart),-1,to_number(null),Cart)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carg),-1,to_number(null),Carg)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carw), -1,to_number(null),Carw)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Cars), -1,to_number(null),Cars)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carx),-1,to_number(null),Carx)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Cara), -1,to_number(null),Cara)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carxs), -1,to_number(null),Carxs)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carq),-1,to_number(null),Carq)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carp),-1,to_number(null),Carp)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Cark),-1,to_number(null),Cark)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carg), -1,to_number(null),Carg)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carn), -1,to_number(null),Carn)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(CarYgh), -1,to_number(null),CarYgh)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carty), -1,to_number(null),Carty)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(Carzx), -1,to_number(null),Carzx)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(asdef), -1,to_number(null),asdef)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(toyYaIncup), -1,to_number(null),toyYaIncup)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(toyYaInLostcup), -1,to_number(null),toyYaInLostcup)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(toyYaInOutOfwcup),-1,to_number(null),toyYaInOutOfwcup)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(toyYaOutcup), -1,to_number(null),toyYaOutcup)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(manYaNoddSdulk128), -1,to_number(null),manYaNoddSdulk128)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(manYaNoddSdulk256), -1,to_number(null),manYaNoddSdulk256)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(manYaNoddSdulk64), -1,to_number(null),manYaNoddSdulk64)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwm128),-1,to_number(null),fudYaDlfd12PsStrMwm128)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwm256),-1,to_number(null),fudYaDlfd12PsStrMwm256)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaDlfd12PsStrMwms64),-1,to_number(null),fudYaDlfd12PsStrMwms64)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaMwmsghCongTo), -1,to_number(null),fudYaMwmsghCongTo)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaMwmscttntodef), -1,to_number(null),fudYaMwmscttntodef)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaMwmscttntoMan), -1,to_number(null),fudYaMwmscttntoMan)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoamMwms09),-1,to_number(null),fudYaNoamMwms09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoFldMwmsSesLackRnRe),-1,to_number(null),fudYaNoFldMwmsSesLackRnRe)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoFldMwmsSesLackTnRe),-1,to_number(null),fudYaNoFldMwmsSesLackTnRe)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoqessMwms09),-1,to_number(null),fudYaNoqessMwms09)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoqMwmsSesrr), -1,to_number(null),fudYaNoqMwmsSesrr)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaNoteMwmsSesStop), -1,to_number(null),fudYaNoteMwmsSesStop)) OVER(PARTITION BY MSD),
SUM(DECODE(SIGN(fudYaslesMwmslg), -1,to_number(null),fudYaslesMwmslg)) OVER(PARTITION BY MSD)
FROM Value
/SY. -
ORA-01467: Sort key too long error.
Dear All,
I have a complex query having lot of joins. It is working fine.
I just added few functions to it i.e. now few fields are calculated using functions.
Now it start giving error: ORA-01467: Sort key too long error.
What may be the problem?
Please help.
-SameerORA-01467 sort key too long
Cause: A DISTINCT, GROUP BY, ORDER BY, or SET operation requires a sort key longer than that supported by Oracle. Either too many columns or too many group functions were specified in the SELECT statement.
Action: Reduce the number of columns or group functions involved in the operation. -
Hi,
I have a query which is customizable by the user based on changes to a table. They recently added 12 more double-precision columns to the table, giving them a total of 353 number columns and 32 varchar2 columns.
The query needs to summarize these records into another table. Before adding the 12 new columns it worked fine. Now we get the oracle sort key too long error.
Basically, the query looks like this:
insert into MyTable(txtField1,txtField2,..,txtField32,numField1,numField2, ..,numField353)
select txtfield1,txtfield2,..,txtfield32, SUM(numfield1),SUM(numfield2), .., SUM(numfield353)
from MyOldTable
where txtField1='somevalue' and txtField2='some other value'
group by txtField1,txtField2,..,txtFieldn;
I have tried increasing the sort_area_size parameter and it doesn't make a difference. What else can/should I change in order to get this query working again? As I said, this worked when there were only 341 sum columns.
Thanks for any information you may provide.
Thanks,
RobThe sort key in Oracle is retricted to a length of one database block less some overhead. The only way to get the query to work is to increase your db_block_size parameter. Unfortunately, this will require rebuilding your database from scratch.
In 9i, you can have different block sizes for different tablespaces. If you are running in 9i, you may be able to move the affected tables to a tablespace with a larger block size, and then do the query. I am not sure which block size would be used for the sort key in 9i, the "database" block size or the "tablespace" block size.
Alternatively, you could look at the design of the table to see if you could split it up into several narrower tables, and use views to get the reporting.
HTH
John -
Sort key too long message from view
has anyone come accross the message "sort key too long" when
selecting from a view, and if so what causes it ?It is also not working for:
SELECT COUNT(*)
FROM common_list_view_test
WHERE pro_id = 2Please tell me what i have to do?
I can't rewrite common_list_view_test as i do not have enough priviledged to change its code, but this view is a lot complicated.
But then why it works for one value and not for another one?
Please help.
-Sameer -
'sort key too long error' while trying to use dynamic sql
Hi All,
I have been trying to generate an interactive report using a dynamically generated SQL query.. for this I have
1) Created a application process that returns the dynamically generated SELECT statement
2) Create a process in the page which creates a collection based on the SELECT statement returned by the application process
3) An interactive report that selects ALL (SELECT * ....) from that particular collection.
On implementing I am getting the 'ORA-01467: sort key too long' error.
On checking this out online I realized that one has to change the Block size of the database to get past this error, but in order to do that I would have to re-create the database, create a backup of the data and then re enter them into the new database which would be a nightmare.
I would like to know if there is any work around to this....
CODE IN THE APPLICATION PROCESS
DECLARE
q VARCHAR2(1000);
BEGIN
IF :P124_COUNTRY - :P124_WORK_GROUP - :P124_PRODUCT - :P124_ROLE = 1 THEN
q:= 'SELECT VISA_COUNTRY AS "Country", ROUND(((COUNT(VISA_ID)/(SELECT COUNT(ROW_ID) FROM PSA_RESOURCE_MANAGER WHERE ACTIVE_FLAG = ''Y''))*100),2) || ''%'' AS "Travel Readiness %" FROM PSA_VISA_INFO WHERE ACTIVE_FLAG = ''Y'' AND VISA_ACTIVE_FLAG = ''Y'' GROUP BY VISA_COUNTRY';
END IF;
return q;
END;
CODE IN THE PROCESS THAT CREATES THE COLLECTION:
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B(
p_collection_name => 'TRAVRED_TEST',
p_query => 'application_process=set_query' );
CODE IN THE INTERACTIVE REPORT:
Select *
From apex_collections
Where collection_name = 'TRAVRED_TEST';
I also tried selecting just 'c001, c002' etc which gave me a 'no data found' output. The query work fine when I ran it in the SQL Workshop
Please help!
Thanks in advance :)Hey Ben,
I am getting the same error when I used the following code in the app process....
DECLARE
q VARCHAR2(32767);
BEGIN
IF :P124_COUNTRY - :P124_WORK_GROUP - :P124_PRODUCT - :P124_ROLE = 1 THEN
q:= 'SELECT visa_country,
COUNT(visa_id) visa_count
FROM psa_visa_info
WHERE active_flag = 'Y'
AND visa_active_flag = 'Y'
GROUP BY visa_country),
row_id_count AS
(SELECT /*+ MATERIALIZE */
COUNT(ROW_ID) row_count
FROM PSA_RESOURCE_MANAGER
WHERE ACTIVE_FLAG = 'Y')
SELECT visa_country,
ROUND(visa_count/(SELECT row_count FROM row_id_count)*100,2) travel_readiness FROM PSA_VISA_INFO WHERE ACTIVE_FLAG = ''Y'' AND VISA_ACTIVE_FLAG = ''Y'' GROUP BY VISA_COUNTRY';
END IF;
return q;
END;
Thanks -
Sort key too long error depends on values supplied to query
Please have a look at this query (Just given for guessing complications).
This query works and gives output for pro_id=1 and other few values.
But it fails for value 2.
SELECT *
FROM common_list_view_test
WHERE che_id != 14
AND(use_id = 299 OR iss_rec = 299 OR che_id IN
(SELECT a.m_che_id
FROM m_chk_pt a, m_role_chk_pt b, m_user c
WHERE a.m_che_id = b.m_che_id
AND b.m_rol_id = c.m_rol_id
AND c.m_use_id = 299))
AND pro_id = 2
ORDER BY iss_dat,
issue_stringFor pro_id = 2 it gives error:
ORA-01467: sort key too long
What do we mean by sort key?
Is it depends on supplied information and the records to be fetched.
If the query is going to fetch a lot of records then do this error occur?
How to avoid this error and make the query to work got pro_id=2.
-SameerIt is also not working for:
SELECT COUNT(*)
FROM common_list_view_test
WHERE pro_id = 2Please tell me what i have to do?
I can't rewrite common_list_view_test as i do not have enough priviledged to change its code, but this view is a lot complicated.
But then why it works for one value and not for another one?
Please help.
-Sameer -
Maximum number of joins in SELECT statement
Dear friends,
Can you tell me, how many max number of joins (inner & outer) we can make in ABAP.
For eg:
table 1: A B C fields
table 2: C D E fields
table 3: E F G fileds..............
Thanks in advance for your valuable time.
Best regards,
Satishhi,
no limit for joins[inner or outer ] in a table , when we consider performance issue joins will reduce the performance of our program so go views instead of joins.
with cheers,
suresh babu aluri. -
Maximum number of column in Composite Primary Key
Hi
I have read that composite primary key can contain maximum of 32 columns (Oracle 9i).
However I am able to create a primary key on 33 columns. It fails to create primary key on 34 columns. Below are the queries.
DROP TABLE XYZ;
CREATE TABLE XYZ
( N1 NUMBER
,N2 NUMBER
,N3 NUMBER
,N4 NUMBER
,N5 NUMBER
,N6 NUMBER
,N7 NUMBER
,N8 NUMBER
,N9 NUMBER
,N10 NUMBER
,N11 NUMBER
,N12 NUMBER
,N13 NUMBER
,N14 NUMBER
,N15 NUMBER
,N16 NUMBER
,N17 NUMBER
,N18 NUMBER
,N19 NUMBER
,N20 NUMBER
,N21 NUMBER
,N22 NUMBER
,N23 NUMBER
,N24 NUMBER
,N25 NUMBER
,N26 NUMBER
,N27 NUMBER
,N28 NUMBER
,N29 NUMBER
,N30 NUMBER
,N31 NUMBER
,N32 NUMBER
,N33 NUMBER
,N34 NUMBER
,N35 NUMBER
,N36 NUMBER
,N37 NUMBER
,N38 NUMBER
,N39 NUMBER
,N40 NUMBER
,N41 NUMBER
,N42 NUMBER
,N43 NUMBER
,N44 NUMBER
,N45 NUMBER
,N46 NUMBER
,N47 NUMBER
,N48 NUMBER
,N49 NUMBER
,N50 NUMBER
ALTER TABLE XYZ ADD CONSTRAINT XYZ_PK PRIMARY KEY
( N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14
,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26
,N27,N28,N29,N30,N31,N32,N33,N34);
ALTER TABLE XYZ ADD CONSTRAINT XYZ_PK PRIMARY KEY
( N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14
,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26
,N27,N28,N29,N30,N31,N32,N33);
Can someone let me know the lmit of maximum no. of columns in Primary Key?
Regards
ArunSQL> select * from v$version;
BANNER
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
SQL> ALTER TABLE XYZ ADD CONSTRAINT XYZ_PK PRIMARY KEY
2 ( N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14
3 ,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26
4 ,N27,N28,N29,N30,N31,N32,N33);
Table altered. -
Maximum Number of Columns that adf table can support in JDeveloper 10.1.3.1
Hi All,
I'm using Toplink 10.1.3.1 . In JDeveloper 10.1.3.1 .
I'm Trying to display the columns of a table which is having the more than 380 columns.
When I'm trying to display the columns in adf table, it is getting hanged. The console of the displaying that "too long".
If Execute the Application with nearly 50 columns, It is working fine.
what is the Maximum number of columns that adf table can support. Is there any other solution for my problem.
could anyone help me out.
Thanks in advance,
regards,
SatishHi,
I am not sure there exist a limitation in columns and if the application hangs then this probably is a bug either in the business service or the view (which can also be due to that the server runs out of memory because of the created object instances).
However, in my opinion a table with 380 columns is a loud cry for denormalization
Frank -
@C:\Y\trigger.sql DIM_DIAL_DIGIT ctva_ra TRG_DIM_DIAL_DIGIT1
:OLD.DIAL_DIGIT_KEY,:OLD.BU_KEY,:OLD.NOP_ID_KEY,:OLD.SDCA_LOCATION_CODE,:OLD.TARGET_REGION_DESC,:OLD.TARGET_COUNTRY_CODE,:OLD.TARGET_COUNTRY_DESC,:OLD.LDCA_NAME,:OLD.SDCA_NAME,:OLD.LDCC_X_COORD,:OLD.LDCC_Y_COORD,:OLD.SDCC_X_COORD,:OLD.SDCC_Y_COORD,:OLD.POPULATION_DATE_TIME,:OLD.ISO_COUNTRY_CODE,:OLD.HOTLIST_IND,:OLD.BLACKLIST_IND,:OLD.UPDATE_DATE_TIME,:OLD.EVENT_TYPE_KEY,:OLD.PROVIDER_DESCRIPTION,:OLD.DM_IND,:OLD.DIAL_DIGIT_OPERATOR_TYPE,:OLD.CALL_DIRECTION_KEY,:OLD.DIAL_DIGIT_DESCRIPTION,:OLD.FORCE_RI_IND,:OLD.TEST_CALL_IND DIAL_DIGIT_KEY,BU_KEY,NOP_ID_KEY,SDCA_LOCATION_CODE,TARGET_REGION_DESC,TARGET_COUNTRY_CODE,TARGET_COUNTRY_DESC,LDCA_NAME,SDCA_NAME,LDCC_X_COORD,LDCC_Y_COORD,SDCC_X_COORD,SDCC_Y_COORD,POPULATION_DATE_TIME,ISO_COUNTRY_CODE,HOTLIST_IND,BLACKLIST_IND,UPDATE_DATE_TIME,EVENT_TYPE_KEY,PROVIDER_DESCRIPTION,DM_IND,DIAL_DIGIT_OPERATOR_TYPE,CALL_DIRECTION_KEY,DIAL_DIGIT_DESCRIPTION,FORCE_RI_IND,TEST_CALL_IND;
when i am running this script it return's string beginning ":OLD.DIAL_..." is too long. maximum size is 239 characters.
how will i overcome from this situation.
i am passing parameter with .sql fileLooks like you are trying to save the history data (with :OLD values).
If you are trying to generate a trigger at runtime, then you need a procedure which is able to loop through user_tab_columns for the given table and construct column strings for generation of triggers.
Then you can use EXECUTE IMMEDIATE to create the trigger.
Keep in mind that debugging such a procedure would be headache if you face any problems in creating the same. -
Maximum number of columns in List for InfoPath to customise?
What is the maximum number of columns I can have in a list to be able to customise it with InfoPath?
We have ~180 columns in our list, and it was working before with ~80, however it's now failing with "The
SOAP message cannot be parsed" error. Please see my StackExchange Error post
here.
So just wondering if InfoPath can't handle too many columns? Or perhaps IIS is killing the message because the XML packet sent to the service is too large?
Update: I increased all IPFS settings in Central Admin ten-fold, but I still got the same error.
Update: As per my StackExchange post - I saved the list as a blank template and was able to customize the list with InfoPath and publish the changes. Seems it could also be data-related. The current list has ~1000 items in it.Hi Peter,
Please try adding the executionTimeout="3000" in your SharePoint site web.config file (please back up the original file firstly) per the following article, then check result again (restart the IIS if needed),
http://sharepointshah.blogspot.com/2012/11/soap-message-cannot-be-parsed-error.html
If the issue still happens, you can check if there are more related errors in ULS log like this
article.
Thanks
Daniel Yang
TechNet Community Support -
ORA 01792 maximum number of columns in a table or view is 1000
Hello every1, I wish to register a large xmlschema doc, I am using the command
begin
dbms_xmlschema.registerschema(
schemaurl=>'xxxx',
schemadoc=>bfilename('XMLDIR','xxxxxx.xsd'),
csid=>nls_charset_id('AL32UTF8'));
end;
But the schema file exists 1000 col and it gives me the error msg of
ORA-01792: maximum number of columns in a table or view is 1000
is there anyway to solve the problems without edit the original schema document?
Thanks for your helpFirst create this package
create or replace package XDB_ANALYZE_XMLSCHEMA_10200
authid CURRENT_USER
as
function analyzeStorageModel(P_COMPLEX_TYPE_NAME VARCHAR2) return XMLTYPE;
function analyzeComplexType(COMPLEX_TYPE VARCHAR2) return XMLTYPE;
procedure renameCollectionTable (XMLTABLE varchar2, XPATH varchar2, COLLECTION_TABLE_PREFIX varchar2);
function printNestedTables(XML_TABLE varchar2) return XMLType;
function getComplexTypeElementList(P_SQLTYPE VARCHAR2, P_SQLSCHEMA VARCHAR2) return XDB.XDB$XMLTYPE_REF_LIST_T;
procedure scopeXMLReferences;
procedure indexXMLReferences(INDEX_NAME VARCHAR2);
function generateSchemaFromTable(P_TABLE_NAME varchar2, P_OWNER varchar2 default USER) return XMLTYPE;
function showSQLTypes(schemaFolder varchar2) return XMLType;
function generateCreateTableStatement(XML_TABLE_NAME varchar2, NEW_TABLE_NAME varchar2) return CLOB;
end XDB_ANALYZE_XMLSCHEMA_10200;
show errors
create or replace package body XDB_ANALYZE_XMLSCHEMA_10200
as
G_DEPTH_COUNT NUMBER(2) := 0;
TYPE BASETYPE_T is RECORD
SUBTYPE varchar2(128),
SUBTYPE_OWNER varchar2(32),
BASETYPE varchar2(128),
BASETYPE_OWNER varchar2(32)
TYPE BASETYPE_LIST_T IS TABLE OF BASETYPE_T;
BASETYPE_LIST BASETYPE_LIST_T := BASETYPE_LIST_T();
function findStorageModel(P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2, P_INCLUDE_SUBTYPES VARCHAR2 DEFAULT 'YES') return XMLType;
function getLocalAttributes(P_TYPE_NAME varchar2, P_TYPE_OWNER VARCHAR2) return XMLType;
function makeElement(P_NAME varchar2)
return xmltype
as
V_NAME varchar2(4000) := P_NAME;
begin
-- -- dbms_output.put_line('Processing : ' || P_NAME);
if (P_NAME LIKE '%$') then
V_NAME := SUBSTR(V_NAME,1,LENGTH(V_NAME) - 1);
end if;
if (P_NAME LIKE '%$%') then
V_NAME := REPLACE(V_NAME,'$','_0x22_');
end if;
return XMLTYPE( '<' || V_NAME || '/>');
end;
function getPathToRoot(SUBTYPE VARCHAR2, SUBTYPE_OWNER VARCHAR2)
return varchar2
as
TYPE_HIERARCHY varchar2(4000);
begin
SELECT sys_connect_by_path( OWNER || '.' || TYPE_NAME , '/')
INTO TYPE_HIERARCHY
FROM ALL_TYPES
WHERE TYPE_NAME = SUBTYPE
AND OWNER = SUBTYPE_OWNER
CONNECT BY SUPERTYPE_NAME = PRIOR TYPE_NAME
AND SUPERTYPE_OWNER = PRIOR OWNER
START WITH SUPERTYPE_NAME IS NULL
AND SUPERTYPE_OWNER IS NULL;
return TYPE_HIERARCHY;
end;
function expandSQLType(ATTR_NAME VARCHAR2, SUBTYPE VARCHAR2, SUBTYPE_OWNER VARCHAR2)
return XMLType
as
STORAGE_MODEL XMLTYPE;
ATTRIBUTES XMLTYPE;
EXTENDED_TYPE XMLTYPE;
ATTR_COUNT NUMBER := 0;
CURSOR FIND_EXTENDED_TYPES
is
select TYPE_NAME, OWNER
from ALL_TYPES
where SUPERTYPE_NAME = SUBTYPE
and SUPERTYPE_OWNER = SUBTYPE_OWNER;
begin
-- dbms_output.put_line('Processing SQLType : "' || SUBTYPE_OWNER || '.' || SUBTYPE || '".' );
STORAGE_MODEL := makeElement(ATTR_NAME);
select insertChildXML(STORAGE_MODEL,'/' || STORAGE_MODEL.getRootElement(),'@type',SUBTYPE)
into STORAGE_MODEL
from dual;
select insertChildXML(STORAGE_MODEL,'/' || STORAGE_MODEL.getRootElement(),'@typeOwner',SUBTYPE_OWNER)
into STORAGE_MODEL
from dual;
ATTRIBUTES := getLocalAttributes(SUBTYPE, SUBTYPE_OWNER);
ATTR_COUNT := ATTR_COUNT + ATTRIBUTES.extract('/' || ATTRIBUTES.getRootElement() || '/@columns').getNumberVal();
select appendChildXML(STORAGE_MODEL,'/' || STORAGE_MODEL.getRootElement(),ATTRIBUTES)
into STORAGE_MODEL
from DUAL;
for t in FIND_EXTENDED_TYPES loop
EXTENDED_TYPE := expandSQLType('ExtendedType',T.TYPE_NAME,T.OWNER);
ATTR_COUNT := ATTR_COUNT + EXTENDED_TYPE.extract('/' || EXTENDED_TYPE.getRootElement() || '/@columns').getNumberVal();
select appendChildXML(STORAGE_MODEL,'/' || STORAGE_MODEL.getRootElement(),EXTENDED_TYPE)
into STORAGE_MODEL
from DUAL;
end loop;
select insertChildXML(STORAGE_MODEL,'/' || STORAGE_MODEL.getRootElement(),'@columns',ATTR_COUNT)
into STORAGE_MODEL
from dual;
return STORAGE_MODEL;
end;
function getLocalAttributes(P_TYPE_NAME varchar2, P_TYPE_OWNER VARCHAR2)
return XMLType
as
V_ATTRIBUTE_COUNT NUMBER := 0;
V_TOTAL_ATTRIBUTES NUMBER := 0;
V_TEMP_RESULT NUMBER;
V_COLLECTION_TYPE varchar2(32);
V_COLLECTION_OWNER varchar2(32);
CURSOR FIND_CHILD_ATTRS
is
select ATTR_NAME, ATTR_TYPE_OWNER, ATTR_TYPE_NAME, INHERITED
from ALL_TYPE_ATTRS
where TYPE_NAME = P_TYPE_NAME
and OWNER = P_TYPE_OWNER
and INHERITED = 'NO'
order by ATTR_NO;
V_ATTR DBMS_XMLDOM.DOMATTR;
V_ATTRIBUTE_LIST XMLTYPE;
V_ATTRIBUTE_LIST_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ATTRIBUTE_LIST_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTRIBUTE XMLTYPE;
V_ATTRIBUTE_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ATTRIBUTE_ROOT DBMS_XMLDOM.DOMELEMENT;
V_TYPE_DEFINITION XMLTYPE;
V_TYPE_DEFINITION_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_TYPE_DEFINITION_ROOT DBMS_XMLDOM.DOMELEMENT;
begin
V_ATTRIBUTE_LIST := makeElement('Attributes');
V_ATTRIBUTE_LIST_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_ATTRIBUTE_LIST);
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_ATTRIBUTE_LIST_DOCUMENT);
for ATTR in FIND_CHILD_ATTRS loop
-- Finding Element / Attribute Name could be tricky. Use SQLName
V_ATTRIBUTE := makeElement(ATTR.ATTR_NAME);
V_ATTRIBUTE_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_ATTRIBUTE);
V_ATTRIBUTE_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_ATTRIBUTE_DOCUMENT);
begin
-- Check for Attributes based on collection types, With Nested Table storage each Collection will cost 2 columns.
select ELEM_TYPE_NAME, ELEM_TYPE_OWNER
into V_COLLECTION_TYPE, V_COLLECTION_OWNER
from ALL_COLL_TYPES
where TYPE_NAME = ATTR.ATTR_TYPE_NAME
and OWNER = ATTR.ATTR_TYPE_OWNER;
-- -- dbms_output.put_line('Adding "' || ATTR.ATTR_NAME || '". Collection of "' || ATTR.ATTR_TYPE_OWNER || '"."' || ATTR.ATTR_TYPE_NAME || '".');
-- Attribute is a Collection Type.
-- Collection will be managed as a NESTED TABLE
-- Each Collection cost 2 columns.
-- May want to count the number of columns in the NESTED_TABLE at a later date.
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLCollType');
DBMS_XMLDOM.SETVALUE(V_ATTR,ATTR.ATTR_TYPE_NAME);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLCollTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,ATTR.ATTR_TYPE_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLType');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_COLLECTION_TYPE);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_COLLECTION_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,2);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
exception
when no_data_found then
-- Attribute is not a collection type.
begin
-- Check for Attributes based on non-scalar types.
select 1
into V_TEMP_RESULT
from ALL_TYPES
where TYPE_NAME = ATTR.ATTR_TYPE_NAME
and OWNER = ATTR.ATTR_TYPE_OWNER;
-- Attribute is based on a non-scalar type. Find the Storage Model for this type.
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLType');
DBMS_XMLDOM.SETVALUE(V_ATTR,ATTR.ATTR_TYPE_NAME);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,ATTR.ATTR_TYPE_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_TYPE_DEFINITION := findStorageModel(ATTR.ATTR_TYPE_NAME, ATTR.ATTR_TYPE_OWNER, 'YES');
V_TYPE_DEFINITION_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_TYPE_DEFINITION);
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_TYPE_DEFINITION_DOCUMENT);
V_ATTRIBUTE_COUNT := DBMS_XMLDOM.GETATTRIBUTE(V_TYPE_DEFINITION_ROOT,'columns');
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_ATTRIBUTE_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT),TRUE));
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_ROOT),DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_TYPE_DEFINITION_DOCUMENT);
if (ATTR.ATTR_TYPE_NAME = 'XDB$ENUM_T' and ATTR.ATTR_TYPE_OWNER = 'XDB') then
-- The cost of a XDB$ENUM_T is 2 columns
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,2);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
else
-- The cost of a non scalar Type is the number of attributes plus one for Type and one for the TYPEID.
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_ATTRIBUTE_COUNT + 2);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
end if;
exception
when no_data_found then
-- Attribute is based on a scalar type
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'SQLType');
DBMS_XMLDOM.SETVALUE(V_ATTR,ATTR.ATTR_TYPE_NAME);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,1);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_ROOT,V_ATTR);
end;
end;
V_TOTAL_ATTRIBUTES := V_TOTAL_ATTRIBUTES + DBMS_XMLDOM.GETATTRIBUTE(V_ATTRIBUTE_ROOT,'columns');
V_ATTRIBUTE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_ATTRIBUTE_LIST_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_ROOT),TRUE));
V_ATTRIBUTE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_LIST_ROOT),DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_ATTRIBUTE_DOCUMENT);
if (V_TOTAL_ATTRIBUTES > 25000) then
exit;
end if;
end loop;
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_ATTRIBUTE_LIST_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_TOTAL_ATTRIBUTES);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ATTRIBUTE_LIST_ROOT,V_ATTR);
return V_ATTRIBUTE_LIST;
end;
function getSubTypes(P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2)
return XMLType
as
CURSOR FIND_SUBTYPES
is
select TYPE_NAME, OWNER
from ALL_TYPES
where SUPERTYPE_NAME = P_TYPE_NAME
and SUPERTYPE_OWNER = P_TYPE_OWNER;
CURSOR FIND_SUBTYPE_HEIRARCHY
is
select LEVEL, TYPE_NAME, OWNER
from ALL_TYPES
where TYPE_NAME <> P_TYPE_NAME
and OWNER <> P_TYPE_OWNER
connect by SUPERTYPE_NAME = PRIOR TYPE_NAME
and SUPERTYPE_OWNER = PRIOR OWNER
start with TYPE_NAME = P_TYPE_NAME
and OWNER = P_TYPE_OWNER;
V_SUBTYPE_LIST XMLType;
V_SUBTYPE_LIST_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_SUBTYPE_LIST_ROOT DBMS_XMLDOM.DOMELEMENT;
V_TYPE_DEFINITION XMLType;
V_TYPE_DEFINITION_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_TYPE_DEFINITION_ROOT DBMS_XMLDOM.DOMELEMENT;
V_SUBTYPE_DEFINITIONS XMLType;
V_SUBTYPE_DEFINITIONS_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_SUBTYPE_DEFINITIONS_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTRIBUTE_LIST XMLType;
V_ATTRIBUTE_LIST_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ATTRIBUTE_LIST_ROOT DBMS_XMLDOM.DOMELEMENT;
V_SUBTYPES_EXIST BOOLEAN := FALSE;
V_TOTAL_columns number;
V_ATTRIBUTE_COUNT number;
V_ATTR DBMS_XMLDOM.DOMATTR;
V_COMPLEX_TYPE VARCHAR2(256);
begin
V_SUBTYPE_LIST := makeElement('SubTypeDefinitions');
V_SUBTYPE_LIST_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_SUBTYPE_LIST);
V_SUBTYPE_LIST_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_SUBTYPE_LIST_DOCUMENT);
V_TOTAL_columns := 0;
for t in FIND_SUBTYPES() loop
V_SUBTYPES_EXIST := TRUE;
V_TYPE_DEFINITION := makeElement(t.TYPE_NAME);
V_TYPE_DEFINITION_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_TYPE_DEFINITION);
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_TYPE_DEFINITION_DOCUMENT);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_TYPE_DEFINITION_DOCUMENT,'SQLTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,t.OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_TYPE_DEFINITION_ROOT,V_ATTR);
begin
select x.XMLDATA.NAME
into V_COMPLEX_TYPE
from XDB.XDB$COMPLEX_TYPE x
where x.XMLDATA.SQLTYPE = t.TYPE_NAME
and x.XMLDATA.SQLSCHEMA = t.OWNER;
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_TYPE_DEFINITION_DOCUMENT,'type');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_COMPLEX_TYPE);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_TYPE_DEFINITION_ROOT,V_ATTR);
-- Consider adding Schema URL Attribute
exception
when no_data_found then
null;
when others then
raise;
end;
V_ATTRIBUTE_LIST := getLocalAttributes(t.TYPE_NAME, t.OWNER);
V_ATTRIBUTE_LIST_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_ATTRIBUTE_LIST);
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_ATTRIBUTE_LIST_DOCUMENT);
V_ATTRIBUTE_COUNT := DBMS_XMLDOM.GETATTRIBUTE(V_ATTRIBUTE_LIST_ROOT,'columns');
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_TYPE_DEFINITION_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_LIST_ROOT),TRUE));
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT),DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_LIST_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_ATTRIBUTE_LIST_DOCUMENT);
V_SUBTYPE_DEFINITIONS := getSubTypes(t.TYPE_NAME,t.OWNER);
if (V_SUBTYPE_DEFINITIONS is not NULL) then
V_SUBTYPE_DEFINITIONS_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_SUBTYPE_DEFINITIONS);
V_SUBTYPE_DEFINITIONS_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_SUBTYPE_DEFINITIONS_DOCUMENT);
V_ATTRIBUTE_COUNT := V_ATTRIBUTE_COUNT + DBMS_XMLDOM.GETATTRIBUTE(V_SUBTYPE_DEFINITIONS_ROOT,'columns');
V_SUBTYPE_DEFINITIONS_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_TYPE_DEFINITION_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_SUBTYPE_DEFINITIONS_ROOT),TRUE));
V_SUBTYPE_DEFINITIONS_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT),DBMS_XMLDOM.MAKENODE(V_SUBTYPE_DEFINITIONS_ROOT)));
end if;
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_TYPE_DEFINITION_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_ATTRIBUTE_COUNT);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_TYPE_DEFINITION_ROOT,V_ATTR);
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_SUBTYPE_LIST_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT),TRUE));
V_TYPE_DEFINITION_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_SUBTYPE_LIST_ROOT),DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION_ROOT)));
V_TOTAL_columns := V_TOTAL_columns + V_ATTRIBUTE_COUNT;
end loop;
if (V_SUBTYPES_EXIST) then
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_SUBTYPE_LIST_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_TOTAL_columns);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_SUBTYPE_LIST_ROOT,V_ATTR);
return V_SUBTYPE_LIST;
else
return NULL;
end if;
end;
function findSuperTypeModel(P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2)
return XMLType
as
begin
-- dbms_output.put_line('Processing Super Type : "' || P_TYPE_OWNER || '"."' || P_TYPE_NAME || '"');
return findStorageModel(P_TYPE_NAME, P_TYPE_OWNER,'NO');
end;
function getStorageModel(P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2, P_INCLUDE_SUBTYPES VARCHAR2 DEFAULT 'YES')
return XMLType
as
V_TYPE_DEFINITION XMLTYPE;
V_ATTRIBUTE_COUNT NUMBER := 0;
SUBTYPE_STORAGE_MODEL XMLTYPE;
V_SUPERTYPE_DEFINITION XMLTYPE;
V_SUPERTYPE_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_SUPERTYPE_ROOT DBMS_XMLDOM.DOMELEMENT;
V_SUBTYPE_DEFINITION XMLTYPE;
V_SUBTYPE_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_SUBTYPE_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTRIBUTE_LIST XMLTYPE;
V_ATTRIBUTE_LIST_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ATTRIBUTE_LIST_ROOT DBMS_XMLDOM.DOMELEMENT;
cursor FIND_SUPERTYPE_HEIRARCHY
is
select TYPE_NAME, OWNER
from ALL_TYPES
where TYPE_NAME <> P_TYPE_NAME
and OWNER <> P_TYPE_OWNER
connect by TYPE_NAME = PRIOR SUPERTYPE_NAME
and OWNER = PRIOR SUPERTYPE_OWNER
start with TYPE_NAME = P_TYPE_NAME
and OWNER = P_TYPE_OWNER
order by LEVEL;
V_COMPLEX_TYPE varchar2(256);
V_SUPERTYPE_NAME varchar2(256);
v_SUPERTYPE_OWNER varchar2(256);
V_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTR DBMS_XMLDOM.DOMATTR;
begin
-- dbms_output.put_line('Generating Storage Model for : "' || P_TYPE_OWNER || '"."' || P_TYPE_NAME || '"');
V_TYPE_DEFINITION := makeElement(P_TYPE_NAME);
V_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_TYPE_DEFINITION);
V_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_DOCUMENT);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'SQLTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,P_TYPE_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
begin
select x.XMLDATA.NAME
into V_COMPLEX_TYPE
from XDB.XDB$COMPLEX_TYPE x
where x.XMLDATA.SQLTYPE = P_TYPE_NAME
and x.XMLDATA.SQLSCHEMA = P_TYPE_OWNER;
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'type');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_COMPLEX_TYPE);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
-- Consider adding Schema URL Attribute
exception
when no_data_found then
null;
when others then
raise;
end;
select SUPERTYPE_NAME, SUPERTYPE_OWNER
into V_SUPERTYPE_NAME, V_SUPERTYPE_OWNER
from ALL_TYPES
where TYPE_NAME = P_TYPE_NAME
and OWNER = P_TYPE_OWNER;
-- Process SuperType.
if (V_SUPERTYPE_NAME is not null) then
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'SQLParentType');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_SUPERTYPE_NAME);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'SQLParentTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_SUPERTYPE_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
-- Find the Definition for the super type. Do not include the definition of it's subtypes.
V_SUPERTYPE_DEFINITION := findSuperTypeModel(V_SUPERTYPE_NAME, V_SUPERTYPE_OWNER);
-- -- dbms_output.put_line(dbms_lob.substr(V_SUPERTYPE_DEFINITION.getClobVal(),1000,1));
V_SUPERTYPE_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_SUPERTYPE_DEFINITION);
V_SUPERTYPE_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_SUPERTYPE_DOCUMENT);
V_ATTRIBUTE_COUNT := V_ATTRIBUTE_COUNT + DBMS_XMLDOM.GETATTRIBUTE(V_SUPERTYPE_ROOT,'columns');
V_SUPERTYPE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_SUPERTYPE_ROOT),TRUE));
V_SUPERTYPE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ROOT),DBMS_XMLDOM.MAKENODE(V_SUPERTYPE_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_SUPERTYPE_DOCUMENT);
end if;
-- Process Attributes defined directly by the Type.
V_ATTRIBUTE_LIST := getLocalAttributes(P_TYPE_NAME, P_TYPE_OWNER);
V_ATTRIBUTE_LIST_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_ATTRIBUTE_LIST);
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_ATTRIBUTE_LIST_DOCUMENT);
V_ATTRIBUTE_COUNT := V_ATTRIBUTE_COUNT + DBMS_XMLDOM.GETATTRIBUTE(V_ATTRIBUTE_LIST_ROOT,'columns');
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_LIST_ROOT),TRUE));
V_ATTRIBUTE_LIST_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ROOT),DBMS_XMLDOM.MAKENODE(V_ATTRIBUTE_LIST_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_ATTRIBUTE_LIST_DOCUMENT);
if (P_INCLUDE_SUBTYPES = 'YES') then
-- Process any Sub-Types...
V_SUBTYPE_DEFINITION := getSubTypes(P_TYPE_NAME, P_TYPE_OWNER);
if (V_SUBTYPE_DEFINITION is not null) then
V_SUBTYPE_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_SUBTYPE_DEFINITION);
V_SUBTYPE_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_SUBTYPE_DOCUMENT);
V_ATTRIBUTE_COUNT := V_ATTRIBUTE_COUNT + DBMS_XMLDOM.GETATTRIBUTE(V_SUBTYPE_ROOT,'columns');
V_SUBTYPE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_SUBTYPE_ROOT),TRUE));
V_SUBTYPE_ROOT := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ROOT),DBMS_XMLDOM.MAKENODE(V_SUBTYPE_ROOT)));
DBMS_XMLDOM.FREEDOCUMENT(V_SUBTYPE_DOCUMENT);
end if;
end if;
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,V_ATTRIBUTE_COUNT);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
-- Cache the type definition.
-- dbms_output.put_line('Cached Storage Model for "' || P_TYPE_OWNER || '.' || P_TYPE_NAME || '".');
insert into XDBPM.XDBPM_STORAGE_MODEL_CACHE (TYPE_NAME, TYPE_OWNER, EXTENDED_DEFINITION, STORAGE_MODEL) VALUES (P_TYPE_NAME, P_TYPE_OWNER, P_INCLUDE_SUBTYPES, V_TYPE_DEFINITION);
return V_TYPE_DEFINITION;
end;
function findStorageModel(P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2, P_INCLUDE_SUBTYPES VARCHAR2 DEFAULT 'YES')
-- Find the Storage Model for the Base Type.
-- If the type is derived from another type we need the storage model of the Base Type
-- As storage models are calculated they are cached in the global temporary table XDBPM_STORAGE_MODEL_CACHE. This makes
-- the process much more efficient. A global temporary table is used to minimize memory usage.
return XMLType
as
V_STORAGE_MODEL XMLType;
V_STORAGE_MODEL_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_STORAGE_MODEL_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTRIBUTE_COUNT VARCHAR2(10);
begin
dbms_output.put_line('findStorageModel(' || G_DEPTH_COUNT || ') : Processing "' || P_TYPE_OWNER || '"."' || P_TYPE_NAME || '".' );
begin
SELECT STORAGE_MODEL
into V_STORAGE_MODEL
from XDBPM.XDBPM_STORAGE_MODEL_CACHE
where TYPE_NAME = P_TYPE_NAME
and TYPE_OWNER = P_TYPE_OWNER
and EXTENDED_DEFINITION = P_INCLUDE_SUBTYPES;
-- dbms_output.put_line('Resolved Storage Model from cache.');
exception
when no_data_found then
G_DEPTH_COUNT := G_DEPTH_COUNT + 1;
V_STORAGE_MODEL := getStorageModel(P_TYPE_NAME,P_TYPE_OWNER, P_INCLUDE_SUBTYPES);
G_DEPTH_COUNT := G_DEPTH_COUNT - 1;
when others then
raise;
end;
V_STORAGE_MODEL_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_STORAGE_MODEL);
V_STORAGE_MODEL_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_STORAGE_MODEL_DOCUMENT);
V_ATTRIBUTE_COUNT := DBMS_XMLDOM.GETATTRIBUTE(V_STORAGE_MODEL_ROOT,'columns');
dbms_output.put_line('findStorageModel : Attribute Count for "' || P_TYPE_OWNER || '"."' || P_TYPE_NAME || '" = ' || V_ATTRIBUTE_COUNT || '.' );
return V_STORAGE_MODEL;
end;
function analyzeStorageModel(P_COMPLEX_TYPE_NAME VARCHAR2, P_TYPE_NAME VARCHAR2, P_TYPE_OWNER VARCHAR2)
-- Generate a map showing the number of columns required to persist an instance of the SQL type.
return XMLType
as
V_STORAGE_MODEL XMLTYPE;
V_COUNT NUMBER := 0;
V_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
V_ROOT DBMS_XMLDOM.DOMELEMENT;
V_ATTR DBMS_XMLDOM.DOMATTR;
V_MODEL DBMS_XMLDOM.DOMELEMENT;
V_TYPE_DEFINITION DBMS_XMLDOM.DOMELEMENT;
begin
V_STORAGE_MODEL := makeElement(P_COMPLEX_TYPE_NAME);
V_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(V_STORAGE_MODEL);
V_ROOT := DBMS_XMLDOM.GETDOCUMENTELEMENT(V_DOCUMENT);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'SQLType');
DBMS_XMLDOM.SETVALUE(V_ATTR,P_TYPE_NAME);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'SQLTypeOwner');
DBMS_XMLDOM.SETVALUE(V_ATTR,P_TYPE_OWNER);
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
V_TYPE_DEFINITION := DBMS_XMLDOM.GETDOCUMENTELEMENT(DBMS_XMLDOM.NEWDOMDOCUMENT(findStorageModel(P_TYPE_NAME, P_TYPE_OWNER, 'YES')));
V_TYPE_DEFINITION := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.IMPORTNODE(V_DOCUMENT,DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION),TRUE));
V_TYPE_DEFINITION := DBMS_XMLDOM.MAKEELEMENT(DBMS_XMLDOM.APPENDCHILD(DBMS_XMLDOM.MAKENODE(V_ROOT),DBMS_XMLDOM.MAKENODE(V_TYPE_DEFINITION)));
V_ATTR := DBMS_XMLDOM.CREATEATTRIBUTE(V_DOCUMENT,'columns');
DBMS_XMLDOM.SETVALUE(V_ATTR,DBMS_XMLDOM.GETATTRIBUTE(V_TYPE_DEFINITION,'columns'));
V_ATTR := DBMS_XMLDOM.SETATTRIBUTENODE(V_ROOT,V_ATTR);
return V_STORAGE_MODEL;
end;
function analyzeStorageModel(P_COMPLEX_TYPE_NAME VARCHAR2)
return XMLTYPE
-- Generate a map showing the number of columns required to persist an instance of the complex type.
as
pragma autonomous_transaction;
V_SQLTYPE VARCHAR2(128);
V_SQLSCHEMA VARCHAR2(32);
V_RESULT XMLType;
begin
G_DEPTH_COUNT := 0;
select ct.XMLDATA.SQLTYPE, ct.XMLDATA.SQLSCHEMA
into V_SQLTYPE, V_SQLSCHEMA
from XDB.XDB$COMPLEX_TYPE ct, XDB.XDB$SCHEMA s
where ct.XMLDATA.NAME = P_COMPLEX_TYPE_NAME
and ref(s) = ct.XMLDATA.PARENT_SCHEMA
and s.XMLDATA.SCHEMA_OWNER = USER;
delete from XDBPM.XDBPM_STORAGE_MODEL_CACHE;
-- delete from XDBPM.XDBPM_STORAGE_MODEL;
V_RESULT := analyzeStorageModel(P_COMPLEX_TYPE_NAME,V_SQLTYPE,V_SQLSCHEMA);
COMMIT;
return V_RESULT;
exception
when no_data_found then
-- dbms_output.put_line('Unable to find SQLType mapping for complexType : "' || USER || '"."' || P_COMPLEX_TYPE_NAME || '".' );
return null;
when others then
raise;
end;
function analyzeSQLType(ATTR_NAME VARCHAR2, TARGET_TYPE_NAME VARCHAR2, TARGET_TYPE_OWNER VARCHAR2)
return XMLType
as
ROOT_NODE_NAME VARCHAR2(128);
ATTR_DETAIL XMLTYPE;
XPATH_EXPRESSION VARCHAR2(129);
CURSOR FIND_CHILD_ATTRS is
select ATTR_NAME, ATTR_TYPE_OWNER, ATTR_TYPE_NAME, INHERITED
from ALL_TYPE_ATTRS
where OWNER = TARGET_TYPE_OWNER
and TYPE_NAME = TARGET_TYPE_NAME
order by ATTR_NO;
CHILD_ATTR XMLTYPE;
ATTR_COUNT NUMBER := 0;
TEMP number;
COLLECTION_TYPE_NAME varchar2(256);
COLLECTION_TYPE_OWNER varchar2(256);
begin
-- -- dbms_output.put_line('Processing Attribute ' || ATTR_NAME || ' of ' || TARGET_TYPE_OWNER || '.' || TARGET_TYPE_NAME );
ATTR_DETAIL := makeElement(ATTR_NAME);
XPATH_EXPRESSION := '/' || ATTR_DETAIL.GETROOTELEMENT();
for ATTR in FIND_CHILD_ATTRS loop
begin
select ELEM_TYPE_NAME, ELEM_TYPE_OWNER
into COLLECTION_TYPE_NAME, COLLECTION_TYPE_OWNER
from ALL_COLL_TYPES
where TYPE_NAME = ATTR.ATTR_TYPE_NAME
and OWNER = ATTR.ATTR_TYPE_OWNER;
CHILD_ATTR := analyzeSQLType(ATTR.ATTR_NAME, COLLECTION_TYPE_NAME, COLLECTION_TYPE_OWNER );
ATTR_COUNT := ATTR_COUNT + CHILD_ATTR.extract('/' || CHILD_ATTR.GETROOTELEMENT() || '/@sqlAttrs').getNumberVal();
select appendChildXML(ATTR_DETAIL,XPATH_EXPRESSION,CHILD_ATTR)
into ATTR_DETAIL
from DUAL;
exception
when no_data_found then
begin
select 1
into TEMP
from ALL_TYPES
where TYPE_NAME = ATTR.ATTR_TYPE_NAME
and OWNER = ATTR.ATTR_TYPE_OWNER;
CHILD_ATTR := analyzeSQLType(ATTR.ATTR_NAME, ATTR.ATTR_TYPE_NAME, ATTR.ATTR_TYPE_OWNER );
ATTR_COUNT := ATTR_COUNT + CHILD_ATTR.extract('/' || CHILD_ATTR.GETROOTELEMENT() || '/@sqlAttrs').getNumberVal();
select appendChildXML(ATTR_DETAIL,XPATH_EXPRESSION,CHILD_ATTR)
into ATTR_DETAIL
from DUAL;
exception
when no_data_found then
ATTR_COUNT := ATTR_COUNT + 1;
end;
end;
end loop;
select insertChildXML(ATTR_DETAIL,XPATH_EXPRESSION,'@sqlAttrs',ATTR_COUNT)
into ATTR_DETAIL
from dual;
return ATTR_DETAIL;
end;
function analyzeComplexType(COMPLEX_TYPE VARCHAR2)
return XMLType
as
RESULT xmltype;
SQLTYPE varchar2(128);
SQLTYPE_OWNER varchar2(32);
begin
select SQLTYPE, SQLTYPE_OWNER
into SQLTYPE, SQLTYPE_OWNER
from USER_XML_SCHEMAS,
xmlTable
xmlnamespaces
'http://www.w3.org/2001/XMLSchema' as "xsd",
'http://xmlns.oracle.com/xdb' as "xdb"
'/xsd:schema/xsd:complexType'
passing Schema
columns
COMPLEX_TYPE_NAME varchar2(4000) path '@name',
SQLTYPE varchar2(128) path '@xdb:SQLType',
SQLTYPE_OWNER varchar2(32) path '@xdb:SQLSchema'
where COMPLEX_TYPE_NAME = COMPLEX_TYPE;
result := analyzeSQLType(COMPLEX_TYPE,SQLTYPE,SQLTYPE_OWNER);
select insertChildXML(RESULT,'/' || COMPLEX_TYPE,'@SQLType',SQLTYPE)
into result
from dual;
return result;
end;
function showSQLTypes(schemaFolder varchar2) return XMLType
is
xmlSchema XMLTYPE;
begin
select xmlElement
"TypeList",
xmlAgg
xmlElement
"Schema",
xmlElement
"ResourceName",
extractValue(res,'/Resource/DisplayName')
xmlElement
"complexTypes",
select xmlAgg
xmlElement
"complexType",
xmlElement
"name",
extractValue(value(XML),'/xsd:complexType/@name',XDB_NAMESPACES.XDBSCHEMA_PREFIXES)
xmlElement
"SQLType",
extractValue(value(XML),'/xsd:complexType/@xdb:SQLType',XDB_NAMESPACES.XDBSCHEMA_PREFIXES)
from table
xmlsequence
extract
xdburitype(p.path).getXML(),
'/xsd:schema/xsd:complexType',
XDB_NAMESPACES.XDBSCHEMA_PREFIXES
) xml
-- order by extractValue(value(XML),'/xsd:complexType/@name',XDB_NAMESPACES.XDBSCHEMA_PREFIXES)
).extract('/*')
into xmlSchema
from path_view p
where under_path(res,schemaFolder) = 1
order by extractValue(res,'/Resource/DisplayName');
return xmlSchema;
end;
procedure renameCollectionTable (XMLTABLE varchar2, XPATH varchar2, COLLECTION_TABLE_PREFIX varchar2)
as
SYSTEM_GENERATED_NAME varchar2(256);
COLLECTION_TABLE_NAME varchar2(256);
CLUSTERED_INDEX_NAME varchar2(256);
PARENT_INDEX_NAME varchar2(256);
RENAME_STATEMENT varchar2(4000);
begin
COLLECTION_TABLE_NAME := COLLECTION_TABLE_PREFIX || '_TABLE';
CLUSTERED_INDEX_NAME := COLLECTION_TABLE_PREFIX || '_DATA';
PARENT_INDEX_NAME := COLLECTION_TABLE_PREFIX || '_LIST';
select TABLE_NAME
into SYSTEM_GENERATED_NAME
from ALL_NESTED_TABLES
where PARENT_TABLE_NAME = XMLTABLE
and PARENT_TABLE_COLUMN = XPATH
and OWNER = USER;
RENAME_STATEMENT := 'alter table ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' ||COLLECTION_TABLE_NAME || '"';
-- -- dbms_output.put_line(RENAME_STATEMENT);
execute immediate RENAME_STATEMENT;
begin
select INDEX_NAME
into SYSTEM_GENERATED_NAME
from ALL_INDEXES
where TABLE_NAME = COLLECTION_TABLE_NAME
and INDEX_TYPE = 'IOT - TOP'
and OWNER = USER;
RENAME_STATEMENT := 'alter index ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' || CLUSTERED_INDEX_NAME || '"';
-- -- dbms_output.put_line(RENAME_STATEMENT);
execute immediate RENAME_STATEMENT;
exception
when NO_DATA_FOUND then
null;
end;
begin
select INDEX_NAME
into SYSTEM_GENERATED_NAME
from ALL_IND_columns
where COLUMN_NAME = XPATH
and TABLE_NAME = XMLTABLE
and TABLE_OWNER = USER;
RENAME_STATEMENT := 'alter index ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' || PARENT_INDEX_NAME || '"';
-- -- dbms_output.put_line(RENAME_STATEMENT);
execute immediate RENAME_STATEMENT;
exception
when NO_DATA_FOUND then
null;
end;
end;
function processNestedTable(currentLevel in out number, currentNode in out XMLType, query SYS_REFCURSOR)
return XMLType
is
thisLevel number;
thisNode xmlType;
result xmlType;
begin
thisLevel := currentLevel;
thisNode := currentNode;
fetch query into currentLevel, currentNode;
if (query%NOTFOUND) then
currentLevel := -1;
end if;
while (currentLevel >= thisLevel) loop
-- Next Node is a decendant of sibling of this Node.
if (currentLevel > thisLevel) then
-- Next Node is a decendant of this Node.
result := processNestedTable(currentLevel, currentNode, query);
select xmlElement
"Collection",
extract(thisNode,'/Collection/*'),
xmlElement
"NestedCollections",
result
into thisNode
from dual;
else
-- Next node is a sibling of this Node.
result := processNestedTable(currentLevel, currentNode, query);
select xmlconcat(thisNode,result) into thisNode from dual;
end if;
end loop;
-- Next Node is a sibling of some ancestor of this node.
return thisNode;
end;
function printNestedTables(XML_TABLE varchar2)
return XMLType
is
query SYS_REFCURSOR;
result XMLType;
rootLevel number := 0;
rootNode xmlType;
begin
open query for
select level, xmlElement
"Collection",
xmlElement
"CollectionId",
PARENT_TABLE_COLUMN
) as XML
from USER_NESTED_TABLES
connect by PRIOR TABLE_NAME = PARENT_TABLE_NAME
start with PARENT_TABLE_NAME = XML_TABLE;
fetch query into rootLevel, rootNode;
result := processNestedTable(rootLevel, rootNode, query);
select xmlElement
"NestedTableStructure",
result
into result
from dual;
return result;
end;
function generateSchemaFromTable(P_TABLE_NAME varchar2, P_OWNER varchar2 default USER)
return XMLTYPE
as
xmlSchema XMLTYPE;
begin
select xmlElement
"xsd:schema",
xmlAttributes
'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd",
'http://xmlns.oracle.com/xdb' as "xmlns:xdb"
xmlElement
"xsd:element",
xmlAttributes
'ROWSET' as "name",
'rowset' as "type"
xmlElement
"xsd:complexType",
xmlAttributes
'rowset' as "name"
xmlElement
"xsd:sequence",
xmlElement
"xsd:element",
xmlAttributes
'ROW' as "name",
table_name || '_T' as "type",
'unbounded' as "maxOccurs"
xmlElement
"xsd:complexType",
xmlAttributes
table_name || '_T' as "name"
xmlElement
"xsd:sequence",
xmlAgg(ELEMENT order by INTERNAL_COLUMN_ID)
into xmlSchema
from (select TABLE_NAME, INTERNAL_COLUMN_ID,
case
when DATA_TYPE in ('VARCHAR2','CHAR') then
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs",
column_name as "xdb:SQLName",
DATA_TYPE as "xdb:SQLType"
xmlElement
"xsd:simpleType",
xmlElement
"xsd:restriction",
xmlAttributes
'xsd:string' as "base"
xmlElement
"xsd:maxLength",
xmlAttributes
DATA_LENGTH as "value"
when DATA_TYPE = 'NUMBER' then
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs",
column_name as "xdb:SQLName",
DATA_TYPE as "xdb:SQLType"
xmlElement
"xsd:simpleType",
xmlElement
"xsd:restriction",
xmlAttributes
decode(DATA_SCALE, 0, 'xsd:integer', 'xsd:double') as "base"
xmlElement
"xsd:totalDigits",
xmlAttributes
DATA_PRECISION as "value"
when DATA_TYPE = 'DATE' then
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs",
'xsd:date' as "type",
column_name as "xdb:SQLName",
DATA_TYPE as "xdb:SQLType"
when DATA_TYPE like 'TIMESTAMP%WITH TIME ZONE' then
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs",
'xsd:dateTime' as "type",
column_name as "xdb:SQLName",
DATA_TYPE as "xdb:SQLType"
else
xmlElement
"xsd:element",
xmlattributes
column_name as "name",
decode(NULLABLE, 'Y', 0, 1) as "minOccurs",
'xsd:anySimpleType' as "type",
column_name as "xdb:SQLName",
DATA_TYPE as "xdb:SQLType"
end ELEMENT
from all_tab_cols c
where c.TABLE_NAME = P_TABLE_NAME
and c.OWNER = P_OWNER
group by TABLE_NAME;
return xmlSchema;
end;
function appendElementList(V_ELEMENT_LIST IN OUT XDB.XDB$XMLTYPE_REF_LIST_T, V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T) return XDB.XDB$XMLTYPE_REF_LIST_T;
function expandModel(P_MODEL XDB.XDB$MODEL_T) return XDB.XDB$XMLTYPE_REF_LIST_T;
function expandChoiceList(P_CHOICE_LIST XDB.XDB$XMLTYPE_REF_LIST_T) return XDB.XDB$XMLTYPE_REF_LIST_T;
function expandSequenceList(P_SEQUENCE_LIST XDB.XDB$XMLTYPE_REF_LIST_T) return XDB.XDB$XMLTYPE_REF_LIST_T;
function expandGroupList(P_GROUP_LIST XDB.XDB$XMLTYPE_REF_LIST_T) return XDB.XDB$XMLTYPE_REF_LIST_T;
function appendElementList(V_ELEMENT_LIST IN OUT XDB.XDB$XMLTYPE_REF_LIST_T, V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
begin
SELECT CAST
SET
CAST(V_ELEMENT_LIST as XDBPM.XMLTYPE_REF_TABLE_T)
MULTISET UNION
CAST(V_CHILD_ELEMENT_LIST as XDBPM.XMLTYPE_REF_TABLE_T)
as XDB.XDB$XMLTYPE_REF_LIST_T
into V_ELEMENT_LIST
from DUAL;
return V_ELEMENT_LIST;
end;
function expandModel(P_MODEL XDB.XDB$MODEL_T)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
V_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
begin
V_ELEMENT_LIST := XDB.XDB$XMLTYPE_REF_LIST_T();
if P_MODEL.ELEMENTS is not null then
V_ELEMENT_LIST := P_MODEL.ELEMENTS;
end if;
if (P_MODEL.CHOICE_KIDS is not NULL) then
V_CHILD_ELEMENT_LIST := expandChoiceList(P_MODEL.CHOICE_KIDS);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end if;
if (P_MODEL.SEQUENCE_KIDS is not NULL) then
V_CHILD_ELEMENT_LIST := expandSequenceList(P_MODEL.SEQUENCE_KIDS);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end if;
-- Process ANYS
if (P_MODEL.GROUPS is not NULL) then
V_CHILD_ELEMENT_LIST := expandGroupList(P_MODEL.GROUPS);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end if;
return V_ELEMENT_LIST;
end;
function expandChoiceList(P_CHOICE_LIST XDB.XDB$XMLTYPE_REF_LIST_T)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
V_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
cursor getChoices is
select c.XMLDATA MODEL
from XDB.XDB$CHOICE_MODEL c, TABLE(P_CHOICE_LIST) cl
where ref(c) = value(cl);
begin
V_ELEMENT_LIST := XDB.XDB$XMLTYPE_REF_LIST_T();
for c in getChoices loop
V_CHILD_ELEMENT_LIST := expandModel(c.MODEL);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end loop;
return V_ELEMENT_LIST;
end;
function expandSequenceList(P_SEQUENCE_LIST XDB.XDB$XMLTYPE_REF_LIST_T)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
V_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
cursor getSequences is
select s.XMLDATA MODEL
from XDB.XDB$SEQUENCE_MODEL s, TABLE(P_SEQUENCE_LIST) sl
where ref(s) = value(sl);
begin
V_ELEMENT_LIST := XDB.XDB$XMLTYPE_REF_LIST_T();
for s in getSequences loop
V_CHILD_ELEMENT_LIST := expandModel(s.MODEL);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end loop;
return V_ELEMENT_LIST;
end;
function expandGroupList(P_GROUP_LIST XDB.XDB$XMLTYPE_REF_LIST_T)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
V_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T;
V_CHILD_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T; V_MODEL XDB.XDB$MODEL_T;
cursor getGroups is
SELECT CASE
-- Return The MODEL Definition for the CHOICE, ALL or SEQUENCE
WHEN gd.XMLDATA.ALL_KID is not NULL
THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = gd.XMLDATA.ALL_KID)
WHEN gd.XMLDATA.SEQUENCE_KID is not NULL
THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = gd.XMLDATA.SEQUENCE_KID)
WHEN gd.XMLDATA.CHOICE_KID is not NULL
THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = gd.XMLDATA.CHOICE_KID)
END MODEL
FROM XDB.XDB$GROUP_DEF gd, XDB.XDB$GROUP_REF gr, TABLE(P_GROUP_LIST) gl
WHERE ref(gd) = gr.XMLDATA.GROUPREF_REF
and ref(gr) = value(gl);
begin
V_ELEMENT_LIST := XDB.XDB$XMLTYPE_REF_LIST_T();
for g in getGroups loop
V_CHILD_ELEMENT_LIST := expandModel(g.MODEL);
V_ELEMENT_LIST := appendElementList(V_ELEMENT_LIST,V_CHILD_ELEMENT_LIST);
end loop;
return V_ELEMENT_LIST;
end;
function getComplexTypeElementList(P_COMPLEX_TYPE_REF REF XMLTYPE)
return XDB.XDB$XMLTYPE_REF_LIST_T
as
V_MODEL XDB.XDB$MODEL_T;
V_BASE_TYPE REF XMLTYPE;
V_ELEMENT_LIST XDB.XDB$XMLTYPE_REF_LIST_T := XDB.XDB$XMLTYPE_REF_LIST_T();
begin
SELECT ct.XMLDATA.BASE_TYPE,
CASE
-- Return The MODEL Definition for the CHOICE, ALL or SEQUENCE
WHEN ct.XMLDATA.ALL_KID is not NULL
THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = ct.XMLDATA.ALL_KID)
WHEN ct.XMLDATA.SEQUENCE_KID is not NULL
THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = ct.XMLDATA.SEQUENCE_KID)
WHEN ct.XMLDATA.CHOICE_KID is not NULL
THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = ct.XMLDATA.CHOICE_KID)
WHEN ct.XMLDATA.GROUP_KID is not NULL
-- COMPLEXTYPE is based on a GROUP.
THEN (
-- RETURN The CHOICE, ALL or SEQUENCE for GROUP
SELECT CASE
WHEN gd.XMLDATA.ALL_KID is not NULL
THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = gd.XMLDATA.ALL_KID)
WHEN gd.XMLDATA.SEQUENCE_KID is not NULL
THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = gd.XMLDATA.SEQUENCE_KID)
WHEN gd.XMLDATA.CHOICE_KID is not NULL
THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = gd.XMLDATA.CHOICE_KID)
END
FROM XDB.XDB$GROUP_DEF gd, xdb.xdb$GROUP_REF gr
WHERE ref(gd) = gr.XMLDATA.GROUPREF_REF
and ref(gr) = ct.XMLDATA.GROUP_KID
-- WHEN ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.ALL_KID is not NULL
-- THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.ALL_KID)
-- WHEN ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.SEQUENCE_KID is not NULL
-- THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.SEQUENCE_KID)
-- WHEN ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.CHOICE_KID is not NULL
-- THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.CHOICE_KID)
-- WHEN ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.GROUP_KID is not NULL
-- -- COMPLEXTYPE is based on a GROUP.
-- THEN (
-- -- RETURN The CHOICE, ALL or SEQUENCE for GROUP
-- SELECT CASE
-- WHEN gd.XMLDATA.ALL_KID is not NULL
-- THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = gd.XMLDATA.ALL_KID)
-- WHEN gd.XMLDATA.SEQUENCE_KID is not NULL
-- THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = gd.XMLDATA.SEQUENCE_KID)
-- WHEN gd.XMLDATA.CHOICE_KID is not NULL
-- THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = gd.XMLDATA.CHOICE_KID)
-- END
-- FROM XDB.XDB$GROUP_DEF gd, xdb.xdb$GROUP_REF gr
-- WHERE ref(gd) = gr.XMLDATA.GROUPREF_REF
-- and ref(gr) = ct.XMLDATA.COMPLEXCONTENT.RESTRICTION.GROUP_KID
WHEN ct.XMLDATA.COMPLEXCONTENT.EXTENSION.ALL_KID is not NULL
THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = ct.XMLDATA.COMPLEXCONTENT.EXTENSION.ALL_KID)
WHEN ct.XMLDATA.COMPLEXCONTENT.EXTENSION.SEQUENCE_KID is not NULL
THEN ( SELECT s.XMLDATA from XDB.XDB$SEQUENCE_MODEL s where ref(s) = ct.XMLDATA.COMPLEXCONTENT.EXTENSION.SEQUENCE_KID)
WHEN ct.XMLDATA.COMPLEXCONTENT.EXTENSION.CHOICE_KID is not NULL
THEN ( SELECT c.XMLDATA from XDB.XDB$CHOICE_MODEL c where ref(c) = ct.XMLDATA.COMPLEXCONTENT.EXTENSION.CHOICE_KID)
WHEN ct.XMLDATA.COMPLEXCONTENT.EXTENSION.GROUP_KID is not NULL
-- COMPLEXTYPE is based on a GROUP.
THEN (
-- RETURN The CHOICE, ALL or SEQUENCE for GROUP
SELECT CASE
WHEN gd.XMLDATA.ALL_KID is not NULL
THEN ( SELECT a.XMLDATA from XDB.XDB$ALL_MODEL a where ref(a) = gd.XMLDATA.ALL_KID)
-
Maximum number of columns in a table or view is 1000
Post Author: TinaReifer
CA Forum: Formula
I am trying to create a direct link from Tririga / Oracle database into Crystal XI. The data I am attempting to pull is from the RETransaction (Escalations). The error I keep receiving is shown below. Has anyone run across this problem and found a solution that can be shared?
Very Appreciative for any feedback.
Tina Reifer
"Failed to retrieve data from the database.
Details: HY000:[Oracle][ODBC][Ora]ORA-01792: maximum number of columns in a table or view is 1000
[Database Vendor Code: 1792]"Post Author: synapsevampire
CA Forum: Formula
Try posting your software, its version, and the type of connectivity you're using for oracle.
Older versions of Crystal used a proprietary Oracle ODBC driver that came with Crystal, but you should SWITCH away from using ODBC anyway, not sure why you elected to use it, it's slower and more problematic.
You'll see Oracle Server listed as a data source, that is generally the best connectivity to use.
Also, what version of Oracle is it, and what Oracle client are you using?
You might need your Oracle dbas assistance here.
Anyway, the error is not a Crystal error, it's being raised by the ODBC driver, and Oracle used to have a maximum of 1024 colums I think it was...been a while...
-k
Maybe you are looking for
-
Error in using Outline Load Utility
HI i am trying to export the members (metadata) of one of my dimension into csv file by using the outlineload utility of hyperion planning. The version of hyperion is 11.1.2.2 instead of creating a csv file the outline load utility throws me followin
-
Install Window 7 Via BOOTCAMP and create extra partitons for Personal Data
Hello All; I'm new to Mac, Just purchased the MBP Mid 2012 non retina 2 months ago.. and upgraded to Mountain Lion 10.8.2 I'd like to Install Winows 7 via BOOTCAMP and have extra 1 or 2 partitions (ExFAT) on the same drive for my personal data, any a
-
Widgets are broken / missing
after my last apple software update, most of the standard widgets that come built into dashboard have gone haywire. in the 'widgets' widget (the one that allows you to turn widgets on and off, sort by date, etc.), the standard apple widgets, such as
-
MB56 for quality notifications?
Hi all, is there a possibility to see quality notifications for substream materials which were consumed for production of a finished good? I mean a kind of MB56 for quality notifications.You enter the finished goods material and batch and see if ther
-
In which table Cheque Number and amount will be available?
Hi all, In which table Cheque Number n Amount will be available for Vendor Invoice. i check in bkis, bkas but its not there.. Thanks in Advance