CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

菜鸟一个存储过程。要METHOD_ID字段每插入一条记录便加1。大家帮忙修改

楼主z000001(阳光天时)2005-04-01 11:51:19 在 Oracle / 开发 提问

CREATE   OR   REPLACE   procedure   pipe_gy_suply_limit  
  (  
  time_year   char,  
  time_mont   char,  
  v_result   out   varchar2  
  )  
  AS  
  v_month   number(10);  
  v_year   number(4)   ;  
  v_mon   number(2)   ;  
  begin  
                          v_month:=to_number(to_char(to_date(trim(time_year)||'-'||trim(time_mont)||'-01','yyyy-mm-dd')));  
          v_year   :=   to_number(to_char(v_begin_date,'yyyy'));  
          v_mon   :=   to_number(to_char(v_begin_date,'mm'));  
          create   sequence   month_id    
                          increment   by   1    
                          start   with   1    
                          maxvalue   999999999    
                          nocycle    
                          cache   10    
   
  --删除原表对应数据  
  delete     from   dssf_suply_limit_fact   where   day_id=v_month;  
  commit;  
  --插入值  
                                                  insert   into   dssf_suply_limit_fact  
                                                  (  
                                                          day_id,  
                                                          unit_code,  
                                                          dept_id,  
                                                          bureau_id,  
                                                          flag,  
                                                          method_name,  
                                                          method_context,  
                                                          method_id  
                                                  )  
                                                  select  
                                                  v_month,  
                                                  dime_valu_id,  
                                                  40,  
                                                  1,  
                                                  1,  
                                                  remark,  
                                                  context,  
                                                  month_id  
                                                  from   dbo.report_stat_content@gynd   a,dssd_unit   b   where   b.dime_valu_id=a.dpt_no  
                                                  and   a.report_no='sjr003'    
                                                  and   to_number(to_char(to_date(a.stat_date,'yyyy-mm')))=to_number(time_year||time_mont);  
                                                  commit;  
   
  v_result:='业扩报装事实数据抽取成功!';  
  exception  
  when   others   then  
  rollback;  
  v_result:='业扩报装事实数据抽取失败!';  
    end;  
  /  
  问题点数:0、回复次数:8Top

1 楼z000001(阳光天时)回复于 2005-04-01 11:53:02 得分 0

题目有问题,修改,是表每增加一条记录,METHOD_ID字段自动加1。Top

2 楼gaosikai()回复于 2005-04-01 13:19:19 得分 0

首先,你的sequence不能在此创建,在外边创建好了,在这里直接用即可。  
  第二,使用时。  
  insert   into   dssf_suply_limit_fact(method_id)     values(month_id.next_val)  
   
  Top

3 楼fuxia(双子星)回复于 2005-04-01 13:28:14 得分 0

是month_id.nextval!!Top

4 楼sohu98(天天)回复于 2005-04-01 13:51:47 得分 0

看了一下你写的过程,感觉有些错误  
  1,pl/sql中只能使用DML语句,不能使用DDL语句,所以不能在过程中创建sequence。也可以使用动态sql创建  
  如  
  declare  
    v_exist   user_objects.object_name%type;  
  begin  
    select   uo.object_name  
    into   v_exist  
    from   user_objects   uo  
    where   uo.object_name   =   upper('month_id');  
   
    dbms_output.put_line('sequence   already   exist');  
   
  exception  
          when   others   then  
          execute   immediate   'create   sequence   month_id   '||  
                                              'increment   by   1   '||  
                                              'start   with   1   '||  
                                              'nomaxvalue   '||  
                                              'nominvalue   '||  
                                              'noorder   '||  
                                              'nocycle   '||  
                                              'cache   10';  
          commit;          
          dbms_output.put_line('create   new   sequence');  
  end;  
   
  插入数据的时候直接使用   month_id.nextval   就可以了Top

5 楼z000001(阳光天时)回复于 2005-04-01 13:54:58 得分 0

讲CONTEXT字段的值插入到METHOD_CONTEXT字段中。两个字段都是BOOL型的。可以直接插吗?Top

6 楼z000001(阳光天时)回复于 2005-04-01 14:54:25 得分 0

只好自己顶一下Top

7 楼gzhughie(hughie)回复于 2005-04-01 19:31:20 得分 0

不用建sequence就可以实现Top

8 楼gzhughie(hughie)回复于 2005-04-01 19:35:00 得分 0

用rownum实现:  
   
  CREATE   OR   REPLACE   procedure   pipe_gy_suply_limit  
  (  
  time_year   char,  
  time_mont   char,  
  v_result   out   varchar2  
  )  
  AS  
  v_month   number(10);  
  v_year   number(4)   ;  
  v_mon   number(2)   ;  
  i_maxID   number(32);  
  begin  
                          v_month:=to_number(to_char(to_date(trim(time_year)||'-'||trim(time_mont)||'-01','yyyy-mm-dd')));  
          v_year   :=   to_number(to_char(v_begin_date,'yyyy'));  
          v_mon   :=   to_number(to_char(v_begin_date,'mm'));  
   
                          SELECT   MAX(method_id)   INTO   i_maxID   FROM   dssf_suply_limit_fact;  
   
  --删除原表对应数据  
  delete     from   dssf_suply_limit_fact   where   day_id=v_month;  
  commit;  
  --插入值  
                                                  insert   into   dssf_suply_limit_fact  
                                                  (  
                                                          day_id,  
                                                          unit_code,  
                                                          dept_id,  
                                                          bureau_id,  
                                                          flag,  
                                                          method_name,  
                                                          method_context,  
                                                          method_id  
                                                  )  
                                                  select  
                                                  v_month,  
                                                  dime_valu_id,  
                                                  40,  
                                                  1,  
                                                  1,  
                                                  remark,  
                                                  context,  
                                                  i_maxID+ROWNUM  
                                                  from   dbo.report_stat_content@gynd   a,dssd_unit   b   where   b.dime_valu_id=a.dpt_no  
                                                  and   a.report_no='sjr003'    
                                                  and   to_number(to_char(to_date(a.stat_date,'yyyy-mm')))=to_number(time_year||time_mont);  
                                                  commit;  
   
  v_result:='业扩报装事实数据抽取成功!';  
  exception  
  when   others   then  
  rollback;  
  v_result:='业扩报装事实数据抽取失败!';  
    end;  
  /Top

相关问题

  • 如何在存储过程中得到最后插入的数据ID(有索引字段)
  • 存储过程问题:请问怎样select 字段1,字段2 from 表1 查询到的列插入表2呢?
  • 用存储过程获取字段信息
  • 存储过程的困惑---如何输入变量字段
  • 想写一个存储blob字段的存储过程
  • 怎么用存储过程生成一个动态字段表???
  • 急——用存储过程解决自增字段的问题
  • 存储过程在调用后能对某字段排序吗?
  • 存储过程取字段值遇到问题
  • 用存储过程更新字符字段怎么做

关键词

  • 字段
  • 数据
  • date
  • suply
  • dssf
  • 插入
  • mont
  • dime
  • month
  • maxid

得分解答快速导航

  • 帖主:z000001

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo