Archive for 三月, 2009

通过对照表实现简体和繁体的转化

星期四, 三月 26th, 2009

由于公司业务的发展需要,最近会有很多台湾的数据过来。 台湾那边使用的字符集一般都包含繁体字,而我们的常用的字符处理的工具对繁体并不支持。 所以想开发个小函数,实现简体和繁体的互相转化。 由于简体和繁体的ASCII并没有特别的对照关系,所以考虑自己动手做一张简体繁体对照表。 sql> desc simple_complex  Name                   Null?    Type  -------------------- ---------- ------------------  SIMPLE_KEY                      VARCHAR2(2)  COMPLEX_KEY                     VARCHAR2(2)   sql> select count(*) from simple_complex;                                                  COUNT(*)                                     ----------                                           2916             SQL> select * from simple_complex where rownum<11;                                                                                      SIMP COMP                                         ---- ----                                         别   別                                           槟   檳                                           鬓   鬢                                           剥   剝                                           博   愽                                           采   埰                                           参   蓡                                           灿   燦                                           册   冊                                           层   層              大概的结构就是这样的,SIMPLE_KEY表示这个字的简体形式,COMPLEX_KEY表示的是繁体形式。 只要有了这样的对照关系就可以简单的实现实现简体和繁体的互相转化。 比如“層次”这样的字符,我查询表simple_complex表找到“層”的简体形式“层”,就会进行替换,得到“层次”。                           转化SQL如下:   --繁体转简体   function complex_to_simple(in_str varchar2) return varchar2 is     n_length number;     n_output varchar2(2000);   begin       n_length := length(in_str);     n_output := ...

使用xxd转换16进制文件

星期三, 三月 25th, 2009

今天发现一个很好用的linux命令xxd,可以将普通文本转化成16进制文件或者将16进制文件转化成普通文件。 先vi生成一个普通文件1.txt。 dwapp@dbrac1:/home/dwapp/sunwg>cat 1.txt 你好 通过xxd将1.txt转化成16进制文件 dwapp@dbrac1:/home/dwapp/sunwg>xxd 1.txt 2.txt dwapp@dbrac1:/home/dwapp/sunwg>cat 2.txt 0000000: c4e3 bac3 0a                            你好 这个时候文件已经被转换成16进制的形式了。 你 ===> c4e3 好 ===> bac3 通过xxd将2.txt转化成回文本文件 dwapp@dbrac1:/home/dwapp/sunwg>xxd -r 2.txt 3.txt  dwapp@dbrac1:/home/dwapp/sunwg>cat 3.txt 你好

insert all…parallel的bug

星期五, 三月 20th, 2009

昨天听同事说到个insert all时候开并行的bug,奇怪的很。 这个bug在10g,11g上都是存在的。 下面模拟下: SQL> create table sunwg01 (id number); Table created SQL> create table sunwg02 (id number); Table created SQL> insert into sunwg02 values(1); 1 row inserted SQL> insert into sunwg02 values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from sunwg01;         ID ---------- SQL> select * from sunwg02;         ID ----------          1          2 SQL> insert into sunwg01 select * from sunwg02; 2 rows inserted SQL> insert ...

ORA-30003

星期五, 三月 20th, 2009

在我们使用start WITH...connect by的时候有时候会遇到ORA-30003的错误。 SUNWG> host oerr ora 30003 30003, 00000, "illegal parameter in SYS_CONNECT_BY_PATH function" // *Cause:  // *Action: use a non-empty constant string as the second argument, //          then retry the operation. 大概的意思就是说 SYS_CONNECT_BY_PATH函数的第二个参数不能为空的字符。 下面模拟下错误: SQL> create table sunwg(id1 number,id2 number); Table created SQL> insert into sunwg select rownum , rownum + 1 from dba_users where rownum<6; 5 rows inserted SQL> ...

通过树型查询实现同类字符拼接问题

星期三, 三月 18th, 2009

通过树型查询实现同类字符拼接问题 这是同事提的一个需求,要实现将表中id相同的记录的key拼接在一起。 例如: SQL> select * from test00;         ID NAME ---------- --------------------          1 mp3          1 mp4          1 mp5          2 kele          2 qixi 要得到这样的结果        ID PATH ---------- -------------------          1 /mp3/mp4/mp5          2 /kele/qixi          实现这个需求有好多种方式,最容易想到的就是通过编写PL/SQL利用游标实现。 不过使用游标的效率肯定比较差,最后想到了利用start WITH..connect BY..的树型结构来实现。 但是这个表中没有树型结构需要的父子关系,那么就自己创建吧。 那么创建父子结构可以使用row_number()或者直接使用rownum 两个SQL如下: row_number()方式 SELECT id, path   FROM (SELECT id,                path,                row_number() OVER(PARTITION BY id ORDER BY LEVEL_id DESC) rn           from (select id,                        sys_connect_by_path(NAME, '/') path,                        level level_id                   ...

Page 1 of 212»