看板 Database 關於我們 聯絡資訊
資料庫名稱:ORACLE 資料庫版本:12c 內容/問題描述:小弟我用PIVOT寫一個轉置的查詢Table 原先的語法如下=> declare sqlqry clob; cols clob; begin select listagg(''''|| PS_C3 ||'''', ',') within group (order by PS_C3) into cols from (select distinct PS_C3 from pick2_1); sqlqry := ' create or replace view pick2_2 as select * from ( select num_po, datdels, nam_cust,xfer, PS_C3, qty from pick2_1 ) pivot ( sum(qty) for PS_C3 in (' || cols || ') )'; execute immediate sqlqry; end; / 後來RUN發現ps_c3這個欄位組成的字串過長 (listagg好像有4000字限制) 於是改用xmlagg的方式組字串 語法如下=> declare sqlqry clob; cols clob; begin select xmlagg(xmlparse(content ''''|| PS_C3 ||''''||',' wellformed) order by ps_c3).getclobval() into cols from (select distinct ps_c3 from pick2_1); sqlqry := 'create or replace view pick2_2 as select * from ( select num_po, datdels, nam_cust,xfer, PS_C3, qty from pick2_1 ) pivot ( sum(qty) for PS_C3 in ( '|| cols ||' ) )'; execute immediate sqlqry; end; / 資料庫會出現報錯訊息"ORA-00936:遺漏表示式"在line24 (sum(qty) from PS_C3 in ('|| cols ||') <=這一句 小弟新手卡一段時間了,請各位高手指點迷津, 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.11.121 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1560915237.A.5EE.html
funk6478: 你先確認PS_C3欄位裡有沒有'|| cols ||'這個值吧 06/19 16:39
funk6478: 抱歉 沒看仔細那是動態欄位 但還是確認一下PS_C3的內容 06/19 17:13
funk6478: 有沒有出問題 06/19 17:13
nzmprophet: PS_C3這個欄位的資料只是很單純的數字而已, 會需要從 06/19 17:50
nzmprophet: 甚麼方向查嗎? 06/19 17:51
funk6478: 看來有可能是匯到cols的時候沒有把最後的逗號去掉 06/19 17:59
funk6478: 用rtrim看看 06/19 18:05
funk6478: rtrim(xmlagg(xmlparse(太長省略).getclobval(),',') 06/19 18:07
nzmprophet: 3q 好像可以了 感謝大神 06/19 19:57