1、oracle10g中是否具有以下功能的函数:
将字符串:100,101,102
拆分后形成以下3条记录:
100
101
102
2、或者是否可以写个自定义函数将此字符串拆分,然后以集合返回?
将字符串:100,101,102
拆分后形成以下3条记录:
100
101
102
2、或者是否可以写个自定义函数将此字符串拆分,然后以集合返回?
解决方案 »
- 用varchar2表示的日期,想在当前日期下+7天,求教~~
- 关于oracle 行列转换 字段合并,很纠结...
- DBLINK远程库表结构修改导致本地库调用此表的过程(主要是用过远程表同义词的行变量赋值)出现ORA-00932: 数据类型不一致: 应为 -, 但却获得 -
- 触发器编写求助!!!
- 紧急求救
- 这个错误怎么解决呢?
- 谁买过正版的Oracle吗?我请他喝茶。
- 动态删除汇总和为0的列,sql(或者存储过程)如何写
- 陈一凡的烦恼(你能够解决吗?)很急的
- 刚刚安装了oracle 11g r1,接下来该做什么?
- 存储过程如何迭代的问题(超难,高手进啊)?
- 怎样在pl/sql中对两个blob对象的值进行比较,急,在线等
2 substr(a,instr(a,',')+1,instr(substr(a,instr(a,',')+1),',')-1),
3 substr(a, instr(a,',',-1)+1)
4 from test;SUBSTR(A,0,INSTR(A,',')-1)
------------------------------------------------------------
SUBSTR(A,INSTR(A,',')+1,INSTR(SUBSTR(A,INSTR(A,',')+1),',')-
------------------------------------------------------------
SUBSTR(A,INSTR(A,',',-1)+1)
------------------------------------------------------------
100
101
102不然的话还是写函数吧
SQL> create table tmp
2 (
3 name varchar2(40),
4 ny varchar2(10),
5 str varchar2(100)
6 )
7 /Table created.SQL> insert into tmp values ('aa', '200607', '6,7');1 row created.SQL> insert into tmp values ('bb', '200608', '4,5,6,7,8,9');1 row created.SQL> select * from tmp
2 /NAME NY STR
---------------------------------------- ---------- ------------------------------------------------
aa 200607 6,7
bb 200608 4,5,6,7,8,9SQL> create or replace procedure substring_array(name varchar2, ny varchar2, str in varchar2) as
2 type array_str is table of varchar2(100)
3 index by binary_integer;
4 myarray array_str;
5 v_str varchar2(4000) default str;
6 begin
7 for i in 0 .. length(str)-length(replace(str,',',''))+1 loop
8
9 if instr(v_str,',') = 0 then
10 myarray(i+1) := v_str ;
11 else
12 myarray(i+1) := substr(v_str,0,instr(v_str,',')-1);
13 end if;
14 v_str := substr(v_str,instr(v_str,',')+1);
15 end loop;
16
17 for i in 0 ..length(str)-length(replace(str,',','')) loop
18 dbms_output.put_line(name || ' ' || ny || ' ' || myarray(i+1));
19 end loop ;
20 end substring_array;
21 /Procedure created.SQL> declare
2 name varchar2(40);
3 ny varchar2(10);
4 str varchar2(100);
5 begin
6 for c1 in (select name,ny,str from tmp)
7 loop
8 substring_array(c1.name,c1.ny,c1.str);
9 end loop;
10 end;
11 /
aa 200607 6
aa 200607 7
bb 200608 4
bb 200608 5
bb 200608 6
bb 200608 7
bb 200608 8
bb 200608 9PL/SQL procedure successfully completed.SQL>
1、声明一个Table类型
2、增加一个function解析字符串,以Table返回具体如下:
----------------------------------------------------CREATE OR REPLACE FUNCTION f_GetSubSpec/*
============================================
版本:v1.0
名称:xx
作用:xxx
说明:
创建:xxx,2006-11-3
修改:xxx,2006-11-3
============================================
*/(
varYearID IN NUMBER, -- 年度标识
varSpecID IN NUMBER -- 投资结构节点标识
)
RETURN NUMBER_SET DETERMINISTIC PIPELINED IS
varNodesString VARCHAR2(2000);
varNodeID VARCHAR2(100);
i INTEGER;
BEGIN
varNodesString := f_getsubspecstring(varYearID, varSpecID);
i := INSTR(varNodesString, ',');
WHILE i <> 0 LOOP
varNodeID := SUBSTR(varNodesString,1, i - 1);
PIPE ROW(varNodeID);
varNodesString := SUBSTR(varNodesString, i + 1);
i := INSTR(varNodesString, ',');
END LOOP;
IF varNodesString IS NOT NULL THEN
PIPE ROW(varNodeID);
END IF;
RETURN;
END;
-------------------------------------------
CREATE OR REPLACE TYPE NUMBER_SET IS TABLE OF NUMBER