昨天老大让我做一个数据字典生成工具,也就是将 oracle 数据库表的各个表结构写入 excel ,仔细琢磨了一下,有点难。
不过问题既然出来了,那就一点一点的解决咯,首先碰到的问题就是字符串的拆分。
因为我们这个项目中的表各个字段的 comments 格式是:{}{}{}, 所以要解析这三个{}内的内容,并将其作为列写入 word 表。
对 oracle 的语法也不怎么熟,在网上找了些资料,看准了2个函数 instr 和 substr, 因为好像 oracle 没有系统函数可以实现分割字符串(如果有,还请高手教我),
就像 .net 中的 string.split(char c) 一样,所以只能自己写了。
写了一个自定义函数,源码如下:
create or replace function splita(string varchar2, splitstring varchar2,num integer) return varchar2 is
index1 integer;
index2 integer;
value1 varchar2(100); --保存第一个{} 内的信息
value2 varchar2(100);--保存第二个{} 内的信息
value3 varchar2(100);--保存第三个{} 内的信息
valueend varchar2(100); --最后设定的返回值
--解析 comments, 获得各个 {} 中的内容
begin
index1 := instr(string,splitstring,2,1);
value1 := substr(string,2,index1-2);
index2 := instr(string,splitstring,2,2);
value2 := substr(string, index1+2, index2-index1-2);
value3 := substr(string,index2+2,instr(string, '}',1,3)-index2-2);
if num=1 then
valueend := value1;
elsif num=2 then
valueend := value2;
elsif num=3 then
valueend := value3;
end if;
return valueend;
end;
其中第三个参数表示要获取的是哪个 {} 内的内容。