Oracle中的两个相同的表

时间:2009-01-29 00:32:11

标签: oracle toad

我创建了两个相同的表,列出了与数据库中某些产品规则有关的所有例外情况。表1是针对第1周的表,表2针对第2周,例外是每周查看,并且不对数据库进行更正。第二周的数据包括第一周的例外情况,我想从第二周开始排除一周的例外情况。仅查看新例外

4 个答案:

答案 0 :(得分:1)

我建议您在表格中添加时间戳,然后在此时间戳上选择/过滤。

通过这种方式,您还可以将所有异常放入一个表中,然后定义两个视图。

我对PL / SQL并不擅长,但也许你可以调整我的MySQL样本:

CREATE DATABASE timetest;
CONNECT timetest;

CREATE TABLE errorlog (
  stamp TIMESTAMP NOT NULL ,
  error VARCHAR(255) NOT NULL
);

INSERT into errorlog (`stamp`, `error`)
  VALUES (DATE_SUB(CURDATE(),INTERVAL 8 DAY), 'old');
INSERT into errorlog (`stamp`, `error`)
  VALUES (NOW(), 'new');

SELECT * FROM errorlog WHERE stamp>DATE_SUB(CURDATE(),INTERVAL 7 DAY);
SELECT * FROM errorlog WHERE stamp<DATE_SUB(CURDATE(),INTERVAL 7 DAY);
DROP DATABASE timetest;

给我:

mysql> SELECT * FROM errorlog WHERE stamp>DATE_SUB(CURDATE(),INTERVAL 7 DAY);
+---------------------+-------+
| stamp               | error |
+---------------------+-------+
| 2009-01-29 01:44:38 | new   |
+---------------------+-------+

mysql> SELECT * FROM errorlog WHERE stamp<DATE_SUB(CURDATE(),INTERVAL 7 DAY);
+---------------------+-------+
| stamp               | error |
+---------------------+-------+
| 2009-01-21 00:00:00 | old   |
+---------------------+-------+

答案 1 :(得分:1)

Oracle有一个MINUS运算符,所以你可以做

SELECT col_a, col_b... FROM table_new
MINUS
SELECT col_a, col_b... from table_old

只要列具有相应的数据类型(如果表具有相同的结构,那么将与SELECT *一起使用),这是有效的。

答案 2 :(得分:0)

按年/周数将表拆分为分区也可能有一些优势。

答案 3 :(得分:0)

为了真正帮助您,我们需要更多信息。你在谈论表格或观点(“......例外只是每周查看......”部分让我困惑)?

如果你能提供一个简短的完整例子(是的 - 从Tom Kyte偷来的),我们可以提供一个完整的答案。如果以上情况没有帮助你。