oracle查询诡异的问题
发布网友
发布时间:2022-05-05 11:42
我来回答
共2个回答
热心网友
时间:2022-05-05 13:12
Oracle 需要首先在数据库中, 创建好 类型 与 函数。
来实现一个 split 功能的处理。
CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000));
/
CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split;
/
CREATE OR REPLACE FUNCTION fn_split(p_str IN VARCHAR2,
p_delimiter IN VARCHAR2)
RETURN ty_tbl_str_split IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2(4000);
str_split ty_tbl_str_split := ty_tbl_str_split();
BEGIN
len := LENGTH(p_str);
len1 := LENGTH(p_delimiter);
WHILE j < len LOOP
j := INSTR(p_str, p_delimiter, i);
IF j = 0 THEN
j := len;
str := SUBSTR(p_str, i);
str_split.EXTEND;
str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR(p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
END IF;
END LOOP;
RETURN str_split;
END fn_split;
/
create table testA(
name varchar2(10),
age varchar2(20)
);
INSERT INTO testA VALUES('张三', '1');
INSERT INTO testA VALUES('李四', '1,23,3,4');
COLUMN "name" FORMAT A15
COLUMN "Value" FORMAT A15
select
testA.name,
to_char(strvalue) as Value
from
testA,
table(fn_split( testA.age, ','));
NAME VALUE追问我不太明白您说的意思,您能抽空给讲解一下吗?