plsql 类似Java中的split方法 字符串分割

--包头
CREATE OR REPLACE PACKAGE asset_formation_api IS

  -- Author  : DIQYE
  -- Created : 2012/11/8 10:40:38
  -- Purpose : dd
  
  TYPE check_bill_id_table IS TABLE OF VARCHAR2(30) 
	INDEX BY BINARY_INTEGER;

  constant_name CONSTANT VARCHAR2(10) := 'ddddd';
	-- 分割符
	split_code CONSTANT CHAR := ',';
	--已建卡
	created_card CONSTANT NUMBER(1) := 0;
	--未建卡
	not_create_card CONSTANT NUMBER(1) := 1;
	--分割字符串 以逗号分割
  FUNCTION str_split(str IN VARCHAR2) RETURN check_bill_id_table;
	
	--验证这些这些验收单的系统验收单是否已经建卡
	--已建卡 check_result = 0
	--未建卡 check_result = 1
	PROCEDURE check_parent(str IN VARCHAR2, check_result OUT NUMBER);

END asset_formation_api;


包体

create or replace package body asset_formation_api is

	current_p INTEGER; --当前字符串的位置
	last_p INTEGER := 1; -- 上次逗号出现的位置
	str_num INTEGER :=1; --截取字符串的数量  没截取一次加一
	FUNCTION nextStr(str IN VARCHAR2) RETURN VARCHAR2;
	PROCEDURE init IS
		BEGIN
			current_p := 1;
			last_p := 1;
			str_num := 1;
		END;
  -- Public function and procedure declarations
	--分割字符串 以逗号分割
  FUNCTION str_split(str IN VARCHAR2) RETURN  check_bill_id_table
	IS
     i INTEGER := 1; --集合下标
		 reslt asset_formation_api.check_bill_id_table; --返回结果
		 param VARCHAR2(2000);
		 s VARCHAR2(100); --分割之后的 单个的字符串
	BEGIN
		init;
		param := TRIM(str)||',';

		LOOP 
			    s := nextStr(param);
					EXIT WHEN s IS NULL;
				  reslt(i) := s;
					i := i+1;
		END LOOP;
	   RETURN reslt;
	END;
	
	--验证这些这些验收单的系统验收单是否已经建卡
	--已建卡 check_result = 0
	--未建卡 check_result = 1
	PROCEDURE check_parent(str IN VARCHAR2, check_result OUT NUMBER)
		IS
		
		BEGIN
			NULL;
		END;
		
		
	FUNCTION nextStr(str IN VARCHAR2) RETURN VARCHAR2
		IS
		    reslt VARCHAR2(100);
				sp_p INTEGER; --逗号在str中出现的第last_p个位置
		BEGIN 
      sp_p := instr(str, split_code,1,str_num); 	
		  IF sp_p = 0 THEN
				reslt := NULL;
			ELSIF str_num = 1 THEN
			      reslt := substr(str, last_p,sp_p-last_p);
			ELSE
			  reslt := substr(str, last_p+1,sp_p-last_p-1);
			END IF;	
			last_p := sp_p;
			str_num := str_num + 1;
			RETURN reslt;
		END;
end asset_formation_api;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值