高分求助!高手进来看一看!

shizhenghai 2004-04-29 05:52:56
我有一张表a的记录如下(DEPART_ID是varchar2型):
DEPART_ID Num
----------- -------
;88;10; 3
;A_1;88;4; 1
;A_2;4;89; 5
... ... ...

能否通过view,procedure,type或其他的方法从表a得到下面的这些数据形式(根据DEPART_ID中的;来拆分):
DEPART_ID Num
----------- -------
88 3
10 3
A_1 1
88 1
4 1
A_2 5
4 5
89 5
... ... ...
该如何实现比较好?不管用什么方法都行啊!
...全文
48 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzi163 2004-05-02
  • 打赏
  • 举报
回复
学习啊,水平还是很低
beckhambobo 2004-04-29
  • 打赏
  • 举报
回复
create or replace type mytabletype as table of number;
/

create or replace function strtab(p_str in varchar2)
return mytabletype
as
lstr varchar2(1000) default p_str||',';
ln number;
ldata mytabletype:=mytabletype();
begin
loop
ln:=instr(lstr,',');
exit when (nvl(ln,0)=0);
ldata.extend;
ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
lstr:=substr(lstr,ln+1);
end loop;
return ldata;
end;
/

SQL> select * from table(cast(strtab('11,12,13') as mytabletype));

COLUMN_VALUE
------------
11
12
13

SQL> create table bb(id varchar2(2),name varchar2(10));

Table created

SQL> insert into bb values('11','张三');

1 row inserted

SQL> insert into bb values('12','李四');

1 row inserted

SQL> insert into bb values('13','王五');

1 row inserted

SQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));

ID NAME
-- ----------
11 张三
12 李四
13 王五
bzszp 2004-04-29
  • 打赏
  • 举报
回复
用游表循环取出数据
对于每一行数据进行处理
instr(str,';',1) 返回 字符串中';'第一次出现的位置
substr(str,2,3) 从第二位开始截取str后面的三个字符

shizhenghai 2004-04-29
  • 打赏
  • 举报
回复
to:ern(学习Oracle)
你好,能具体点吗?
ern 2004-04-29
  • 打赏
  • 举报
回复
可以用plsql实现,不过很繁
用instr加上substr函数就可以拆分了
shizhenghai 2004-04-29
  • 打赏
  • 举报
回复
自己先顶一下!
有人帮忙嘛?

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧