Oracle数据库查询

Oracle数据库查询,oracle,Oracle,我想创建一个包含一百万条随机记录的测试数据库表。因为我是数据库新手, 有没有办法用脚本填充它 这是我对我的表的查询 CREATE TABLE Employee (SEQNUM NUMBER, START_DATE DATE, END_DATE DATE, DURATION TIME, START_TIME TIME

我想创建一个包含一百万条随机记录的测试数据库表。因为我是数据库新手, 有没有办法用脚本填充它

这是我对我的表的查询

CREATE TABLE Employee (SEQNUM NUMBER,
                       START_DATE DATE,
                       END_DATE DATE,
                       DURATION TIME,
                       START_TIME TIME,
                       END_TIME TIME,
                       TOTAL_NUM NUMBER);

这里是一个简单的查询,使用双表和DBMS_RANDOM获取样本数据

CREATE TABLE SMPL 
AS                        
WITH 
    smpl AS 
(                       
    SELECT 
        ROWNUM SEQNUM,
        TO_DATE('01012016','ddmmyyyy') + 365 * dbms_random.value START_TIME, /* random 1 year timestamps from 1.1.2016 */
        TRUNC(10000 * dbms_random.value) TOTAL_NUM, /* random 0 .. 10.000 */
        31 * dbms_random.value DURATION /* duration 0 .. 31 days */
    FROM dual 
    CONNECT BY LEVEL <= 100  /* update number of records here */
)
SELECT 
    SEQNUM, 
    TRUNC(START_TIME) START_DATE,
    TRUNC(START_TIME + DURATION) END_DATE,
    DURATION,
    START_TIME,
    START_TIME + DURATION END_TIME,
    TOTAL_NUM
FROM smpl;
正如其他人所指出的,该员工的姓名不正确。也考虑只存储


在表格中物理地开始时间和持续时间,并计算例如在视图中的相关列开始日期、结束时间、结束日期。

这里是一个使用双表和DBMS随机获取样本数据的简单查询

CREATE TABLE SMPL 
AS                        
WITH 
    smpl AS 
(                       
    SELECT 
        ROWNUM SEQNUM,
        TO_DATE('01012016','ddmmyyyy') + 365 * dbms_random.value START_TIME, /* random 1 year timestamps from 1.1.2016 */
        TRUNC(10000 * dbms_random.value) TOTAL_NUM, /* random 0 .. 10.000 */
        31 * dbms_random.value DURATION /* duration 0 .. 31 days */
    FROM dual 
    CONNECT BY LEVEL <= 100  /* update number of records here */
)
SELECT 
    SEQNUM, 
    TRUNC(START_TIME) START_DATE,
    TRUNC(START_TIME + DURATION) END_DATE,
    DURATION,
    START_TIME,
    START_TIME + DURATION END_TIME,
    TOTAL_NUM
FROM smpl;
正如其他人所指出的,该员工的姓名不正确。也考虑只存储


在表格中实际开始时间和持续时间,并计算相关列的开始日期、结束时间和结束日期。

不应将日期和时间部分分开。数据类型DATE或TIMESTAMP始终同时包含日期和时间值。Oracle中没有时间数据类型。我建议您的表应该是CREATE表Employee SEQNUM NUMBER、START_DATE、END_DATE、DURATION INTERVAL DAY TO SECOND、TOTAL_NUM NUMBER。祝你好运。我很难想象一个员工的持续时间是什么。如果持续时间是结束日期和开始日期之间的差异,它不应该存储在数据库中-这是正确的数据库设计原则之一。问题:总数应该是什么样的数字?整数?限制为低值和高值?非负数?这只是一个示例表,所以我只把基本名称作为Employee。实际上,我正在创建一个用于存储呼叫详细记录SCDR的表。感谢@WernfriedDomscheit和mathguy的快速回复。您不应该将日期和时间部分分开。数据类型DATE或TIMESTAMP始终同时包含日期和时间值。Oracle中没有时间数据类型。我建议您的表应该是CREATE表Employee SEQNUM NUMBER、START_DATE、END_DATE、DURATION INTERVAL DAY TO SECOND、TOTAL_NUM NUMBER。祝你好运。我很难想象一个员工的持续时间是什么。如果持续时间是结束日期和开始日期之间的差异,它不应该存储在数据库中-这是正确的数据库设计原则之一。问题:总数应该是什么样的数字?整数?限制为低值和高值?非负数?这只是一个示例表,所以我只把基本名称作为Employee。实际上,我正在创建一个用于存储呼叫详细记录SCDR的表。感谢@WernfriedDomscheit和mathguy提供的快速响应。这里的编辑演示了如何同时缩进查询。感谢@Marmite Bomber提供的快速解决方案。是的,表名有点奇怪,我没有想到更改名称,因为它只是一个示例表。感谢您提供的解决方案,查询再次完美运行。下面是一个编辑,演示如何缩进查询。感谢@Marmite Bomber提供的快速解决方案。是的,表名有点奇怪,我没有想到更改名称,因为它只是一个示例表。查询再次完美运行,感谢您的解决方案。