2013-04-29 77 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

对于这种情况,在要插入两行从查询投影每一行,看看,而不是使用多表插入。序列有点问题,但您可以使用触发器填充该列。

相关问题