2012-03-02 12 views
1

次のコードを使用してください。このエラーを取得する次のようなエラーにOracle - 1つのフィールドに行を追加する

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

+0

TSQLはMSSQL用です。この質問はOracleです。 – Paparazzi

+0

運がない。私が "to_Cont"を4000にキャストしてフィールドを使用しても、私はまだ同じエラーが発生しています。 – David

答えて

0

ORA-01489: result of string concatenation is too longは、SQLの一部がSQLのVARCHAR2の制限である4000文字を超える文字列を生成していることを意味します。

の前にの文字列を構成する必要があるため、SUBSTR関数に送信するため、SQLの文字列を切り捨てることはできません(例:SUBSTR)。限界を超えてしまいます。

これを解決するには、独自のPL/SQLファンクションを作成する必要があります。このファンクションでは、VARCHAR2の長さ制限(32KB)が長くなります。

関連する問題