银果 2016-04-15 01:21 采纳率: 50%
浏览 1951
已采纳

oracle数据库存储过程 截取数据

oracle数据库存储过程问题:
传入一个字符串(字符串格式如:“辣椒_食品,西红柿_食品,板鞋_服饰,植物油_食品,领带_食品,……”)
现在我想根据“,”来截断字符串存储到数组(其他变量也行)。然后就可以得到这样的数组string[] arr={“辣椒_食品”,“西红柿_食品”,……}
然后循环遍历这个数组,循环每条数据的时候再根据“_”来分割数据,分割完成后存储在两个变量中,在根据变量来执行update语句。

目的就是要把传入的字符串根据“,”分割,然后在根据“_”分割,分割后分别执行update语句,如:update 表 set 字段1=当前时间 where 字段2=根据“_”分割的前面一部分 and 字段2=根据“_”分割的后面一部分

  • 写回答

2条回答

  • 寒心孤瞳 2016-04-15 03:29
    关注

    已经测试通过,请自行优化

    --构造数据
    Create Table t (
    a Varchar2(30),
    b Varchar2(30),
    c Date
    );
    Insert Into t Values('辣椒','食品',Null);
    Commit;

    --存储过程
    Declare
    str_tmp Varchar2(4000) := '辣椒_食品,西红柿_食品';--请自行封装成函数入参

    CURSOR cur_emp Is
    SELECT REGEXP_SUBSTR(str_tmp, '[^,]+', 1, ROWNUM,'i') str
    FROM DUAL
    CONNECT BY ROWNUM <=
    LENGTH(str_tmp) -
    LENGTH(Replace(str_tmp, ',',''))+1;

    row_emp cur_emp%ROWTYPE;    
    col1 Varchar2(4000);
    col2 Varchar2(4000);
    

    Begin
    OPEN cur_emp;
    FETCH cur_emp INTO row_emp;
    WHILE cur_emp%FOUND
    LOOP
    col1 := REGEXP_SUBSTR(row_emp.str,'[^_]+',1,1,'i');
    col2 := REGEXP_SUBSTR(row_emp.str,'[^_]+',1,2,'i');
    Update t Set c=Sysdate Where a=col1 And b=col2;
    FETCH cur_emp INTO row_emp;
    END LOOP;
    End;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题