我有一个select语句,它提供了错误的行数.我可以重现的问题Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
和Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
我不能复制的Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
测试数据:
CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME, 10 as maxVal
FROM DUAL
CONNECT BY LEVEL <= 5;
create table orders as
SELECT LEVEL AS ID, 'Order_'||LEVEL AS NAME
FROM DUAL
CONNECT BY LEVEL <= 3;
Run Code Online (Sandbox Code Playgroud)
如果我尝试以下查询,我只得到3个结果而不是5个结果:
select p.*
from person p
where …
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释为什么以下查询返回两行而不只是一行?
SELECT *
FROM (SELECT 'ASDF' c1, MAX (SUM (1)) c2
FROM DUAL
GROUP BY dummy
UNION
SELECT 'JKLÖ' c1, 1 c2
FROM DUAL)
WHERE c1 != 'ASDF';
--another Version with the same wrong result:
SELECT *
FROM (SELECT 1 c1, MAX (SUM (1)) c2
FROM DUAL
GROUP BY dummy
UNION all
SELECT 2 c1, 1 c2
FROM DUAL)
WHERE c1 != 1;
Run Code Online (Sandbox Code Playgroud)
Oracle提供两行是否正确?在我看来,c1 = ASDF的行不应该在结果中.
这是第一个查询结果的屏幕截图:
我在以下版本上测试了它,总是得到相同的结果:
我正在使用Oracle数据库11g企业版11.2.0.4.0版 - 64位生产,我在TOAD 12.6.0.53中执行以下查询时出现问题(不是典型查询,但仅用于演示):
with rownums
as (select distinct
rownum rn
from dual
connect by level <=1000000
)
select rn from rownums
union all
select rn from rownums;
--Edit: this Statement ist NOT showing the behaviour:
begin
for cRow in (with rownums
as (select distinct
rownum rn
from dual
connect by level <=1000000
)
select rn from rownums
union all
select rn from rownums)
loop
return;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
执行此查询后,我可以使用此查询检查临时表空间的用法:
SELECT S.sid, S.serial#, SUM (T.blocks) * …
Run Code Online (Sandbox Code Playgroud) 我想使用分区方法将我的表分成两个维度:
第一个维度是键列表。该列表可以随着时间的推移而增长,如果键列表将被扩展,我不想需要 DBA 来添加分区。因此我想使用自动列表分区。
第二个维度是日期列的每日范围。
这是我的例子,它给了我一个ORA-14179
CREATE TABLE PartitionedTable
(
id number,
PartitionKey number,
created date
)
PARTITION BY LIST (PartitionKey) AUTOMATIC
SUBPARTITION BY RANGE (created) INTERVAL (NUMTODSINTERVAL(1,'DAY'))
( PARTITION p_PartitionKey VALUES (1)
( SUBPARTITION p_created VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy'))
)
);
Run Code Online (Sandbox Code Playgroud)
我使用的是Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
如果插入新键和新日期,是否可以选择如何以最少的工作量创建这个二维分区表?