2012-03-02 48 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)更大。