2 u011597071 u011597071 于 2016.04.15 09:21 提问

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

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

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

2个回答

u012850795
u012850795   2016.04.15 11: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;

herozhangbz
herozhangbz   2016.04.15 11:24

你是提供思路让别人给你编码吗?我觉得你搞反了吧,我怎么觉得应该是某些大牛给你提供思路你自己去编码呢,自己都有思路了还问什么并没有看到你遇到什么不会的问题。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Oracle数据库存储过程开发
Oracle数据库存储过程开发 Oracle数据库存储过程开发: 一个完整的存储过程开发包含如下流程:: 1.存储过程包头Package定义 2.存储过程包体PackageBody定义 3.存储过程定时程序Program定义 4.存储过程定时调度Schedule定义 5.存储过程定时任务Job定义 Oracle数据库存储过程开发: 一个完整的存储过程开发包含如下流程: 1.存储...
oracle中实现截取字符串(substr)、查找字符串位置(instr)、替换字符串(replace)
(1)oracle中实现截取字符串:substr substr(string, start_position, [length]) 其中,string是元字符串,start_position为开始位置,length是可选项,表示子字符串的位数。 例子: substr('ABCDEFG', 0);    -- 返回结果是:ABCDEFG,从0位开始截取后面所有 substr
Oracle数据库存储过程和存储函数
存储过程和存储函数        指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。 存储过程没有返回值。存储函数有返回值        创建存储过程       用CREATE PROCEDURE命令建立存储过程和存储函数。         语法: create [or replace] PROCEDURE过程名(参数列表)  AS         PL
利用oracle存储过程向数据库批量插入数据
create or replace procedure test is begin for i in 1 ..100 loop insert into 表名(id,name) values(i, sysdate); end loop; end test; BEGIN test(); END; drop procedure test
存储过程截取字符串
/*  作用:根据指定拆分字符,对字符串进行拆分  调用:select Split from fun_Split(',','1,2,3')  */  Create function [dbo].[fun_Split]  (@Symbol varchar(100),  @SplitStr varchar(8000))  returns @t table(Sp
oracle截取表字段中带分号的信息的存储过程
oracle截取表字段中带分号的信息的存储过程
Oracle数据库(十一)——存储过程下
有参存储过程 存储过程允许带有参数,参数的使用将增加存储过程的灵活性。存储过程中如果使用了参数,在执行存储过程时必须为其指定的参数。 --使用输入参数的存储过程 --根据输入的产品类型从表PRODUCTINFO中搜索符合要求的数据,并将其打印到屏幕 CREATE PROCEDURE PRODUCT_INTYPE_PRC (parm_ctgyname IN VARCHAR2) AS cur_...
oracle数据库存储过程范例(使用游标进行循环)
使用游标进行循环。 create or replace PROCEDURE Counting AS a_count number; cursor authorListCursor is select ID from SCOPUS_AUTHOR ; BEGIN delete from A_TEMP; for curAuthor in authorListCursor loop be
sql存储过程版Split(字符串截取)
create proc SplitStr @AccountString varchar(max), --需要截取的字符串 @SplitChar varchar(10) --要截取的分隔符 as begin declare @Account varc
Oracle表的分析统计及应用的存储过程
<br /><br />使用dbms_stats 还是analyze<br />自从Oracle8.1.5引入dbms_stats包, Oracle及专家们就推荐使用dbms_stats取代analyze。 理由如下:<br />1. dbms_stats可以并行分析<br />2. dbms_stats有自动分析的功能(alter table monitor )<br />3. analyze 分析统计信息的有些时候不准确<br /><br /> <br /> <br /> <br />第1,2比较好理解