0

从下面的查询中,我试图插入表 SRC_PK_COLUMNS (Sequence_no,pk_key),其中函数返回 TABLE 类型。但这期待单行。如何处理这个错误。

 INSERT INTO SRC_PK_COLUMNS (pk_key)
    (SELECT * 
      FROM TABLE(parse_comma_delimited(( SELECT SOURCE_COLUMNS 
                                         FROM RULES_TABLE 
                                           WHERE RULE_NAME = RULE_NAME ), ','))  );
  1. 00000 - “单行子查询返回多于一行”

谢谢

4

1 回答 1

0

您需要使用此语法

insert into TAB (COL1, COL2, COL3)
select C1, C2, C3 from OTHER_TAB;

也就是说,没有select括号中的语句。这样,每个选定的记录也将被插入,而不是带有括号的语法,实际上,只需要一个记录。

注意:插入的列和选定的列需要在数量上一致(以及“可转换”数据类型)。因此,为了填充Sequence_no,语句也变为

INSERT INTO SRC_PK_COLUMNS (sequence_no, pk_key)
    SELECT rownum, t.*
      FROM TABLE(parse_comma_delimited(( SELECT SOURCE_COLUMNS 
                                     FROM RULES_TABLE 
                                       WHERE RULE_NAME = RULE_NAME ), ',')) t;

也许,您想使用序列而不是rownum.

于 2013-03-26T05:30:39.870 回答