Oracle SQL 插入语句 ORA-00979

Oracle SQL insert into statement ORA-00979

我有以下问题:

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

此 returns 计数的 array/two 列 table 和值为 500 的日期。这就是我想要的。

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

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

我想要做的是用第一个查询中的所有数据填充新的 table,其中 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)所做的。我只想返回并在 table.

中获取值 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 到 max(my_value)

的所有内容

我不完全确定这就是你想要的,但听起来你想将所有粗略数据抓取到你的 "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

(注意:未经测试,因为没有样本数据,没有创建脚本等..即没有任何事情可以继续:( )

您可以为此使用 create table as select。这样您就可以将新列添加到新 table。此外,您可以更改 table 如果有什么变化。

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