【问题标题】:How to generate rows for table Order_details, for each row in the Order_header table?如何为 Order_details 表生成行,为 Order_header 表中的每一行?
【发布时间】:2015-05-14 02:08:03
【问题描述】:

我有两张桌子。 Order_header 和 Order_detail。对于 Order_header 表中的每一行,我想生成 1 个或多个 Order_detail 行并将它们插入到 Order_detail 表中。每个标题行的详细信息行数是随机的,最多为常量 max_detailrows 中的数字。如何进行 Order_detail 表的生成行?

【问题讨论】:

  • 不清楚你在问什么。发布一个示例,包括表详细信息、插入语句和您想要的输出。并解释实现预期输出的规则。

标签: sql oracle random


【解决方案1】:

您可以使用DBMS_RANDOM.VALUE 函数,生成随机值。 在 hierarchical query 中使用它来为 Order_Header 表中的每一行生成行。

架构设置:

create table order_header(
  order_id number,
  order_desc varchar2(10)
  );

insert into order_header values(1,'lorem');
insert into order_header values(2,'ewroc');
insert into order_header values(3,'tdsfg');

commit;

create table order_details(
  order_id number,
  order_detail_nr number,
  order_detail_desc varchar2(20)
  );

查询:

insert into order_details
select 
    order_id,
    level,
    order_desc || '_' || level
from order_header
connect by level <= dbms_random.value(1,7)  --max number of rows needed should be given here.
and prior order_id = order_id
and prior sys_guid() is not null;

输出:

select * from order_details
order by 1,2;

  ORDER_ID ORDER_DETAIL_NR ORDER_DETAIL_DESC
---------- --------------- ------------------
         1               1 lorem_1
         1               2 lorem_2
         1               3 lorem_3
         2               1 ewroc_1
         2               2 ewroc_2
         2               3 ewroc_3
         2               4 ewroc_4
         3               1 tdsfg_1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多