2013-04-29 78 views
2
INSERT INTO items (
    item_id, psuedo_row_flag, item_hierarchy_level, 'some other cols...' 
) 
    WITH s_item_group 
    AS 
    (
     SELECT hier_level, 'some other cols...' FROM ITEM_GROUPS 
    ) 
    SELECT MY_SQL.nextval, 'N', hier_level FROM s_item_group 
    UNION ALL 
    SELECT MY_SQL.nextval, 'Y', hier_level + 1 FROM s_item_group; 

基本上我想插入兩組行。一個表示一個實際的行,另一個表示一個僞行。僞行將 psuedo_row_flag設置爲'Y',其層次級別爲其對應的實際行的hierarchy_level的+1。使用「WITH」子句插入多行時出現序列錯誤

當我嘗試此查詢我得到「這裏不允許序列號」錯誤

回答

2

您不能在UNION'ed查詢中使用序列。

試試這個:

INSERT 
INTO items 
WITH s_items_group AS (...) 
SELECT my_sql.nextval, flag, hier_level 
FROM (
     SELECT 'N' flag, hier_level 
     FROM s_items_group 
     UNION ALL 
     SELECT 'Y' flag, hier_level + 1 
     FROM s_items_group 
     ) 
2

只是包裝裏面所有其它子查詢的UNION:

INSERT INTO items 
    (item_id, 
    psuedo_row_flag, 
    item_hierarchy_level) 
    WITH s_item_group AS 
    (SELECT hier_level 
     FROM ITEM_GROUPS) 
    select my_sql.nextval as item_id, 
      psuedo_row_flag, 
      hier_level 
    from (SELECT 'N' psuedo_row_flag, 
        hier_level 
      FROM s_item_group 
      UNION ALL 
      SELECT 'Y' psuedo_row_flag, 
        hier_level + 1 
      FROM s_item_group) 

而且順便說一句,你可能想修正拼寫psuedo_row_flag :-)

0

對於這種情況,在要插入兩行從查詢投影每一行,看看,而不是使用多表插入。序列有點問題,但您可以使用觸發器填充該列。

相關問題