Oracle SQL插入语句ORA-00979

时间:2015-07-28 18:07:12

标签: sql oracle insert

我的查询如下:

SELECT count(*) AS my_table_count
    ,my_table_date_value
FROM my_table
WHERE my_table_value = 500
GROUP BY my_table_date_value

这将返回计数的数组/两列表以及值为500的日期。这就是我想要的。

但是,我为上述查询的结果创建了一个这样的表:

CREATE TABLE my_new_table (
 my_table_count NUMBER(10)
,my_table_date_value DATE
,my_table_value NUMBER(38)
)

我想要做的是用第一个查询中的所有数据填充新表,其中my_table_value > 0

我尝试使用insert into(select ...),但我不确定如何以这种方式填充my_table_value。我想从1到max(my_table_value)进行迭代会这样做,但我不确定如何在Oracle SQL中编写它。

我想要的结果是我可以查询my_new_table而不是使用第一个查询,如下所示:

SELECT my_table_count
      ,my_table_date_value
FROM my_new_table
WHERE my_table_value = 500;

修改

这是我现在为一个值(比如500)做的事情。我想要做的就是返回并在表格中获得值0-499。

 SET my_value = 500;
 SET sqlString = 'select COUNT(*) AS MY_COUNT,MY_DATE from MY_TABLE where MY_VALUE=? group by MY_DATE';
        SET rows[] = <query result, with my_value = 500>
        DECLARE index INTEGER 1;
        FOR result as r.rows[] DO
            SET count = result.MY_COUNT;
            SET my_date = result.MY_DATE;
            insert into MY_NEW_TABLE(MY_COUNT,MY_DATE,MY_VALUE)
            VALUES(count,my_date,my_value);
            SET index = index + 1;
        END FOR;

我想做的就是修改它,所以它插入从1到最大的所有内容(my_value)

2 个答案:

答案 0 :(得分:3)

我不完全确定这是你所追求的,但听起来你想把所有粗略的数据都抓到你的“my_new_table”中,然后再筛选出来。

  insert into my_new_table
     ( my_table_count,
       my_table_date_value,
       my_table_value )
  select count(*) as my_table_count,
           my_table_date_value ,
           my_table_value
    from my_table 
   where my_table_value > 0
   group by my_table_date_value,
            my_table_value

(注意:未经测试,因为没有样本数据,没有创建脚本等等。即没有什么可继续:()

答案 1 :(得分:1)

您可以使用create table as select。这样,您可以将新列添加到新表中。此外,如果发生变化,您可以更改表格。

create table my_new_table as
select count(*) as my_table_count,my_table_date_value,my_table_value
from my_table 
where my_table_value = 500 --add more conditions when needed
group by my_table_date_value