就是SQL拆行的问题 ,每次需要传入时间段参数查询,根据数量的值去拆分成行,oracle游标怎么写?

u010133107 2015-03-16 01:38:25
oracle数据库sql 查询到

货物 机械 时间 工作类型 数量
A CQ 2014/10/10 15:40:00 F 3
B BQ 2014/10/11 10:45:00 Q 6

根据数量字段的值拆分成:
货物 机械 时间 工作类型 数量
A CQ 2014/10/10 15:40:00 F 1
A CQ 2014/10/10 15:40:00 F 1
A CQ 2014/10/10 15:40:00 F 1
B BQ 2014/10/11 10:45:00 Q 1
B BQ 2014/10/11 10:45:00 Q 1
B BQ 2014/10/11 10:45:00 Q 1
...........
注意:每次查询不一定有两种货物,有时只有一种货物,有时是没有。需要传入开始时间跟结束时间的参数。
菜鸟一个,请教大侠给个代码。
...全文
174 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 u010133107 的回复:
[quote=引用 6 楼 IceIsabel 的回复:]

create or replace procedure p_goods_dtl(bgntm date,endtm date)
is
i number;
begin
  for v_goods in (select * from t_goods where t_time between bgntm and endtm) loop
    for i in 1..v_goods.n_num loop
      insert into t_goods_dtl values (v_goods.c_goods,v_goods.c_mechine,v_goods.t_time,v_goods.c_type,1);
    end loop;
  end loop;
  commit;
end;
n_num是你货物表的数量字段,需要根据你的表结构进行调整 附上我测试用的建表语句

create table t_goods (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);

create table t_goods_dtl (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);
过程创建成功,无报错,想验证但是我在pl/sql developer 的cmmand window 里输入命令: sql>Exec 过程名 '2014/10/10 15:40:00','2014/10/10 16:40:00' ,提示 ORA-06550: 第 1 行, 第 28 列: PLS-00103: 出现符号 "2014/10/10 15:40:00"在需要下列之一时: := . ( @ % ; 是怎么回事?[/quote] 楼主时间类型传入错误。
IceIsabel 2015-03-16
  • 打赏
  • 举报
回复

SQL> exec p_goods_dtl(to_date('2014/10/10 15:40:00','yyyy/mm/dd hh24:mi:ss'),to_date('2014/10/10 16:40:00','yyyy/mm/dd hh24:mi:ss'));
PL/SQL procedure successfully completed
u010133107 2015-03-16
  • 打赏
  • 举报
回复
引用 6 楼 IceIsabel 的回复:

create or replace procedure p_goods_dtl(bgntm date,endtm date)
is
i number;
begin
  for v_goods in (select * from t_goods where t_time between bgntm and endtm) loop
    for i in 1..v_goods.n_num loop
      insert into t_goods_dtl values (v_goods.c_goods,v_goods.c_mechine,v_goods.t_time,v_goods.c_type,1);
    end loop;
  end loop;
  commit;
end;
n_num是你货物表的数量字段,需要根据你的表结构进行调整 附上我测试用的建表语句

create table t_goods (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);

create table t_goods_dtl (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);
过程创建成功,无报错,想验证但是我在pl/sql developer 的cmmand window 里输入命令: sql>Exec 过程名 '2014/10/10 15:40:00','2014/10/10 16:40:00' ,提示 ORA-06550: 第 1 行, 第 28 列: PLS-00103: 出现符号 "2014/10/10 15:40:00"在需要下列之一时: := . ( @ % ; 是怎么回事?
IceIsabel 2015-03-16
  • 打赏
  • 举报
回复

create or replace procedure p_goods_dtl(bgntm date,endtm date)
is
i number;
begin
  for v_goods in (select * from t_goods where t_time between bgntm and endtm) loop
    for i in 1..v_goods.n_num loop
      insert into t_goods_dtl values (v_goods.c_goods,v_goods.c_mechine,v_goods.t_time,v_goods.c_type,1);
    end loop;
  end loop;
  commit;
end;
n_num是你货物表的数量字段,需要根据你的表结构进行调整 附上我测试用的建表语句

create table t_goods (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);

create table t_goods_dtl (
c_goods char(1),
c_mechine char(2),
t_time date,
c_type char(1),
n_num number
);
u010133107 2015-03-16
  • 打赏
  • 举报
回复
直接运行,提示“必须声明n_num”, 在declare下再加:n_num number; 还是提示必须声明“n_num“组件。
u010133107 2015-03-16
  • 打赏
  • 举报
回复
引用 3 楼 IceIsabel 的回复:
时间参数楼主可以按照业务要求在游标中添加
如果写成个过程该如何写,需要保存在数据库里。能否写个完整的?谢谢!
IceIsabel 2015-03-16
  • 打赏
  • 举报
回复
时间参数楼主可以按照业务要求在游标中添加
IceIsabel 2015-03-16
  • 打赏
  • 举报
回复

declare
i number;
begin
  for v_goods in (select * from t_goods) loop
    for i in 1..v_goods.n_num loop
      insert into t_goods_dtl values (v_goods.c_goods,v_goods.c_mechine,v_goods.t_time,v_goods.c_type,1);
    end loop;
  end loop;
  commit;
end;
u010133107 2015-03-16
  • 打赏
  • 举报
回复
没人想要分!!!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧