我目前有两个表,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
我是在编写错误的查询还是以非常低效的方式编写查询?这两张桌子很大但我觉得不太大。
答案 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
。