Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Create a Dynamic Table with Dynamic columns using PIVOT Clause in Oracle 12c

user5743038Aug 29 2016 — edited Aug 29 2016

Hi, Good Afternoon.

Oracle Environment Is Oracle 12c

I am stuck at coming up with a Logic, where I have to Create Dynamic Table, with Dynamic Columns names and The table name is from a Query data field.I Tried with Pivot Query but with no luck,

I keep getting "ORA-56901: non-constant expression is not allowed for pivot|unpivot values"

I am Copy pasting my query which involves XMLDB and XQUERY, I am using the result Set of the XML Query result in to my Pivot Query, but I am not Able to get the required result.

SELECT * FROM (

SELECT   1 AS  study_id

       , sd.*

       , 1 AS print_id

       , current_Timestamp AS crtd_dt

       , current_timestamp AS updt_dt

       , 'robot_user'    AS crtd_by

       , 'robot_user'    AS updtd_dt

  FROM   odm_file odf,

         XMLTABLE(XMLNAMESPACES (DEFAULT 'http://www.cdisc.org/ns/odm/v1.3')

                 , 'for $h  in /ODM/ClinicalData

                        ,$i in $h/SubjectData/StudyEventData/FormData

                        ,$j in $h/$i/ItemGroupData

                        ,$k in $h/$i/$j/ItemData                                                                                    

                     return element r {$h,$i,$j,$k}'                    

         PASSING  odf.xml

         COLUMNS  STDY_NM              VARCHAR2(30)   PATH  'ClinicalData/@StudyOID'                                      

                  --,VISIT_RPT_KEY     VARCHAR2(20)          

                   ,FRM_OID            VARCHAR2(30)   PATH  'FormData/@FormOID'       

                   ,FRM_RPT_KEY        VARCHAR2(30)   PATH  'FormData/@FormRepeatKey'

                   ,ITM_GRP_OID        VARCHAR2(30)   PATH  'ItemGroupData/@ItemGroupOID'                 

                   ,ITM_GRP_RPT_KEY    VARCHAR2(30)   PATH  'ItemGroupData/@ItemRepeatKey'

                   ,ITM_OID            VARCHAR2(30)   PATH  'ItemData/@ItemOID'

                   ,ITM_VAL            VARCHAR2(30)   PATH  'ItemData/@Value'

                   ,IS_ITM_NULL        VARCHAR2(30)   PATH  'ItemData/@IsNull'

                   ,TRNSCTN_TYP        VARCHAR2(30)   PATH  'ItemData/@TransactionType'                 

                 )sd

WHERE  odf.odm_file_id = 2

)

--SELECT * FROM PIVOT_DATA

   PIVOT( COUNT(ITM_GRP_OID)

            FOR  ITM_GRP_OID

               IN(ITM_OID,OTM_VAL)

         );

I am Copy pasting the result Data of the inner query, the query starts from the Bold parenthesis and italicized

           

Seq_IDAnalysis_NMFORM_IDF_Repeat KeyItem_group_IDItem_group_Repeat_keyItem_IDItem ValueItem is NullTransaction ModePrint_idCRTD_DTUPDT_DTCRTD_BYUPDTD_DT
1K-Means DistroHFR6HDFSIG.HDFS2000HDFSPERFY11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2000HDFSREASNDRESULT NOT MISSING11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS0201211/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS0202211/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS0203311/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS0204411/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS0205111/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS01P6311/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS01P7311/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFS02067611/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFSSTGDAT2014-02-0411/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSIG.HDFS2001HDFSSTGMTHDMACHINE LANG COMPUTER ADMIN11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS2001_REPAIRQUESTLANGENGLISH11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS2001_REPAIRQUESTCATREPAIR11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS2001_REPAIRHDFSLEVALSTUDY ANALYST11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS2001_REPAIRQUESTEVINTXSINCE THE LAST TIME11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS2001_REPAIRQUESTTPTDAILY11/1/19901/1/1990Robot_userRobot_user
1K-Means DistroHFR6HDFSHDFS_2001_DERIVATIONQUESTSPIDCOSINE/SINE11/1/19901/1/1990Robot_userRobot_user

My Mockup Data Should look like

THe Form Name from the Result set becomes the Table Name that has to be Created, here HFR6HDFS

                  

Table Name: HFR6HDFS
Analysis_NMPrint_idItem Group ( is an Alias)HDFSPERFHDFSREASNDHDFS0201HDFS0202HDFS0203HDFS0204HDFS0205HDFS01P6HDFS01P7HDFS0206HDFSSTGDATHDFSSTGMTHDQUESTLANGQUESTCATHDFSLEVALQUESTEVINTXQUESTTPTQUESTSPID
1K-Means Distro1IG.HDFS2000YRESULT NOT MISSINGNullNullNullNullNullNullNullNullNullNullNullNullNullNullNullNull
1K-Means Distro1IG.HDFS2001NullNull2234133762014-02-04MACHINE LANG COMPUTER ADMINNullNullNullNullNullNull
1K-Means Distro1IG.HDFS2000_REPAIRNullNullNullNullNullNullNullNullNullNullNullENGLISHREPAIRSTUDY ANALYSTSINCE THE LAST TIMEDAILYNull
1K-Means Distro1HDFS_2001_DERIVATIONNullNullNullNullNullNullNullNullNullNullNullNullNullNullNullNullNullCOSINE/SINE
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 26 2016
Added on Aug 29 2016
6 comments
1,725 views