0 0

关于一张表中一条记录某个字段进行分割处理后插入到另一张表中多条数据的存储过程写法25

     有两张表,表A为原始数据表,表B为结果表。表A结构如下所示,id为主键

   
id      result
1 a*b;c*d;e*f
2 g*h;i*j
3 k*l
4

表B结构如下所示,id和seq为联合主键

id seq num size
1        1 a b
1 2 c d
1 3 e f
2 1 g h
2 2 i j
3 1 k l

 

现在要对表A的数据进行处理,把A表result字段的数据按";"分割成好几条数据后再按"*"分割插入到B表中,结果如B表所示,这个用存储过程怎么实现啊,小弟想了很久想不出,各位有啥好的方法推荐下,拜托了

 


问题补充:<div class="quote_title">kidding87 写道</div><div class="quote_div">数据库字符串不好处理用程序处理呗 <br /></div>就是不允许用程序,必须在存储过程里写 <br /> <br /><div class="quote_title">hasi 写道</div><div class="quote_div">a×b 中 a和b都是固定一位吗?如果是算法更简单啊 <br /></div>a和b位数都不一定,必须在存储过程里写,不允许使用java代码,java只负责调用一下存储过程
2012年3月03日 10:31

4个答案 按时间排序 按投票排序

0 0

采纳的答案

我用的oracle的给你写出来,哎,没写过存储过程的孩子伤不起啊,真心麻烦,还是java好使,能多给点分就多给点吧。。

declare
  sub_str    varchar2(4000);
  insert_str varchar2(4000);
  seq        int := 0;
  pos1       int := 1;
  pos2       int := 1;
  cursor c is
    select * from a;
  r c%rowtype;
begin
  open c;
  --using loop to get the searching result 
  loop
    fetch c
      into r;
    exit when c%notfound;
    --init pos1,pos2
    pos1 := 1;
    pos2 := 1;
    seq  := 0;
    while pos2 != 0 and pos1 <= length(r.result) loop
      pos2 := instr(r.result, ';', pos1);
      seq  := seq + 1;
      --judge the pos2  ,if equals zero means that the searching get end
      if pos2 != 0 then
        sub_str := substr(r.result, pos1, pos2 - pos1);
      else
        sub_str := substr(r.result, pos1);
      end if;
      --e.g. insert into B (id,seq,num,space) values (1,1,'a','b')
      insert_str := 'insert into B (id,seq,num,space) values (' 
                    || r.id || ',' || seq || ',' ||chr(39)||
                   substr(sub_str, 1, instr(sub_str, '*')-1) ||chr(39)|| ','||chr(39) ||
                   substr(sub_str, instr(sub_str, '*') + 1) ||chr(39)|| ')' ;
      --dbms_output.put_line(insert_str);
      execute immediate insert_str;
      -- next search position add 1
      pos1 := pos2 + 1;
    end loop;
  end loop;

  close c;
  commit;
end;

2012年3月06日 12:50
0 0

a×b 中 a和b都是固定一位吗?如果是算法更简单啊

2012年3月05日 21:27
0 0

oracle 吗

2012年3月05日 21:26
0 0

数据库字符串不好处理用程序处理呗

2012年3月05日 12:16

相关推荐

    方案中的数据库设计原则

    - **示例**:比如,在一个查询中,如果先按照某字段进行筛选再进行其他操作,通常会比先做其他操作后筛选更快。 ##### 1.1.3 数据更新 在数据库中,更新操作也是常见的操作之一。如何高效地进行数据更新是需要关注...

    2021-2022计算机二级等级考试试题及答案No.10414.docx

    - 选项A:删除查询并不限于一次只能删除一条记录,可以一次性删除多条记录。 - 选项B:删除查询可以同时从多个表中删除记录,但需要使用事务处理来确保一致性。 - 选项C:删除过的记录无法通过“撤销”命令恢复,...

    2021-2022计算机二级等级考试试题及答案No.12182.docx

    在 SQL 中,如果设置了字段为 AUTO_INCREMENT 属性,则在插入新记录时会自动为该字段分配下一个可用的编号。因此,在执行 `"INSERT INTO customers VALUES(0,"张良",87523012);"` 语句后,“张良”的客户编号将是 ...

    2021-2022计算机二级等级考试试题及答案No.16320.docx

    在数据库操作中,使用`APPEND BLANK`命令添加新记录后,新记录会被添加到当前记录之后的位置。如果当前记录是第5条记录,则新记录的位置将是第6位。 ### 19. 唯一性约束 在数据库中,唯一性约束可以防止指定字段或...

    2015创新工场校招研发笔试题

    二维表**:即关系数据库中的表,每个表都是由行和列组成的,行代表记录,列表示属性或字段,是关系数据库中最基本的存储单位,因此用来表示实体间联系。 ### 二、多项选择题 #### 2. 在一个单链表中,若p所指结点...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    4.1.3 在master上更新一条记录,而slave上却找不到 115 4.2 特殊情况:slave的中继日志relay-log损坏 116 4.3 人为失误 118 4.4 避免在master上执行大事务 119 4.5 slave_exec_mode参数可自动处理同步复制错误 ...

    2021-2022计算机二级等级考试试题及答案No.18342.docx

    - **指令执行**:中央处理器(CPU)是计算机的核心部件,它通过执行一条条指令来完成各种运算和控制任务。 ### 22. 命令按钮的提示文本设置 - **ToolTipText 属性**:在Visual Basic等开发环境中,可以使用`...

    Oracle事例

    当指定时,如果父表中的记录被删除,则依赖于父表的记录也被删除 REFERENCE 表名() on delete cascade; 7、删除带约束的表 Drop table 表名 cascade constraints; 8:索引管理 &lt;1&gt;.creating function-based...

    c++ 面试题 总结

    段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一...

Global site tag (gtag.js) - Google Analytics