您的位置:首页 > 编程语言 > Java开发

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

2012-11-08 15:14 543 查看
--包头
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: