2012-03-02 47 views
1

使用以下代碼。不斷收到以下錯誤Oracle - 在一個字段中一起添加行

Select distinct 
    ship_L.ship_ID, 
    ship_L.Item_Num, 
    C.sku, 
    C.ob_oid, 
    c.Container 
From (
    Select distinct 
     ob_oid, 
     sku, 
     substr((ltrim(sys_Connect_By_Path(trim(to_Cont),'/'))),2,(length(ltrim(sys_Connect_By_Path(trim(to_Cont),'/'))))) as Container 
    From (
     Select distinct 
      Ob_oid, 
      sku, 
      To_Cont, 
      row_number() Over (Partition by sku order by to_Cont) -1 as seq 
     From (
      Select distinct 
       ob_oid, 
       sku, 
       To_Cont 
      from elite_76_w1.ITH_f 
      --Where ob_oid = '237472' 
      -- and sku = '64154' 
      ) 
     ) 
     Where connect_By_Isleaf = 1 
      Connect by seq = Prior seq +1 and sku = Prior sku 
      Start with seq = 1 
) C 
Left Join elite_76_D.ship_L 
    on ship_L.ship_id = C.ob_oid 
    and ship_L.item_num = C.sku 

WHere C.ob_oid = '237472' 
and C.sku = '64154' 

收到此錯誤: ORA-01489:字符串連接的結果是太長01489. 00000 - 「字符串連接的結果是太長」 *原因:字符串concatenatin結果大於最大尺寸。 *操作:確保結果比最大尺寸更小。供應商代碼1489Error在第3行

開始: SKU位置 64154 A153945
64154 A153943
64154 A153947
64154 A153946
64154 A153944

極品: 64154 A153944/A153945/A153946/A153947

謝謝大家的幫助, David

+2

由於這是一個猜測,我會評論,不發表。在最內層查詢中將「to_cont」轉換爲較大的VARCHAR()。例如,它是一個VARCHAR(32),將它轉換爲VARCHAR(4000)。 *** [所有假設您的輸出字段被限制爲與您的輸入相同的長度,這可能會因此在您的輸出中允許更多字符。] ***如果4000不夠用,您可以查看在CLOB上,但是其他代碼不適用於該數據類型。 – MatBailie 2012-03-02 18:21:11

+0

TSQL適用於MSSQL。這個問題是Oracle。 – Paparazzi 2012-03-02 20:21:04

+0

沒有運氣。即使我將「to_Cont」投放到4000個使用該字段的地方,我仍然遇到同樣的錯誤。 – David 2012-03-05 14:24:26

回答

0

ORA-01489: result of string concatenation is too long意味着你的部分SQL產生了超過4000個字符的字符串,這是SQL中VARCHAR2的限制。

您不能在SQL中截斷字符串(例如使用SUBSTR),因爲SQL需要在之前構造字符串,然後將它發送給SUBSTR函數;並且因爲它超出限制而放棄。

要解決這個問題,您可能需要創建自己的PL/SQL函數,其中VARCHAR2的長度限制(32k)更大。