Oracle使用带有计算的先前表中的数据创建表

时间:2015-03-31 21:35:25

标签: sql database oracle

我目前有两个表,cts(时间,符号,开盘价,收盘价,最高价,最低价,成交量)和股息(时间,符号,股息)。我正在尝试使用列Time,Date和Percent创建名为dividend_percent的第三个表。为了得到股息的百分比,我认为公式是((关 - (开/红利))/开)* 100.

但请求超出了oraclexe允许的大小,因此失败但我不相信我的请求应该那么大。

SQL> create table dividend_percent 2 as (select c.Time, c.Symbol, (((c.close-(c.open+d.dividend))/c.open)*100) P RCNT 3 from cts c inner join dividend d 4 on c.Symbol=d.Symbol); from cts c inner join dividend d * ERROR at line 3: ORA-12953: The request exceeds the maximum allowed database size of 11 GB

我是在编写错误的查询还是以非常低效的方式编写查询?这两张桌子很大但我觉得不太大。

2 个答案:

答案 0 :(得分:2)

也许您可以制作一个视图,它将两个表组合在一起,并在需要时执行必要的计算:

CREATE VIEW DIVIDEND_PERCENT_VIEW AS
  SELECT c.TIME,
         c.SYMBOL, 
         ((c.CLOSE - (c.OPEN + d.DIVIDEND)) / c.OPEN) * 100 AS PRCNT
    FROM CTS c
    INNER JOIN DIVIDEND d
      ON c.SYMBOL = d.SYMBOL AND
         c.TIME = d.TIME
    WHERE c.OPEN <> 0;

这样可以避免重复数据,无需将所有内容存储两次,并对创建视图后添加的数据以及预先存在的数据执行PRCNT计算。

分享并享受。

答案 1 :(得分:0)

如果您打算执行DML操作并保持表同步,也许可以使用materialized view