--1.首先定义一个数组类型: CREATE OR REPLACE TYPE "VARCHAR2VARRAY" IS VARRAY(8000) of VARCHAR2(4000) --2.然后定义一个函数:CREATE OR REPLACE FUNCTION sf......
--1.首先定义一个数组类型:
CREATE OR REPLACE TYPE "VARCHAR2VARRAY" IS VARRAY(8000) of VARCHAR2(4000)
--2.然后定义一个函数:
CREATE OR REPLACE FUNCTION sf_split_string(string VARCHAR2, substring VARCHAR2) RETURN Varchar2Varray IS len integer := LENGTH(substring); lastpos integer := 1 - len; pos integer; num integer; i integer := 1; ret Varchar2Varray := Varchar2Varray(4000); BEGIN LOOP pos := instr(string, substring, lastpos len); IF pos > 0 THEN --found num := pos - (lastpos len); ELSE --not found num := LENGTH(string) 1 - (lastpos len); END IF;
IF i > ret.LAST THEN ret.EXTEND; END IF;
ret(i) := SUBSTR(string, lastpos len, num);
EXIT WHEN pos = 0; lastpos := pos; i := i 1; END LOOP;
RETURN ret; END;
--测试:
declare ret Varchar2Varray := Varchar2Varray(NULL); i number; begin i := 1; ret := sf_split_string('你、我、他', '、'); --获得分割数组 while i <= ret.count loop dbms_output.put_line(ret(i)); i := i 1; end loop; end;
--具体例子:
create or replace function func_isexists(v_str1 varchar2, v_str2 varchar2, v_complete out varchar2, v_nocomplete out varchar2) return varchar2 is --判断字符串2是否完全存在于字符串1
--例子:v_str1=abcdefg v_str2=a、b 则返回 1,因为 a 和 b 都存在于 v_str1 --例子: v_str1=abcdefg v_str2=a、h 则返回 0,因为 h 不存在于 v_str1 ret Varchar2Varray := Varchar2Varray(NULL); i integer; j integer; v_returnvalue varchar2(1);
begin v_returnvalue := 0;
if v_str1 = '' or v_str1 is NULL then v_complete := ''; v_nocomplete := v_str2; return '0'; end if;
if v_str2 = '' or v_str2 is NULL then v_complete := ''; v_nocomplete := ''; return v_returnvalue; end if;
1/2 1 2 下一页 尾页 |