ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 连接字符串的SQL方法

连接字符串的SQL方法

原创 Linux操作系统 作者:yangtingkun 时间:2007-08-25 00:00:00 0 删除 编辑

我的博客的第一篇文章就是介绍如何将字符串连接在一起的,这里介绍一下通过SQL的方法来解决同样的问题。

对字符串的“sum”——在Oracle中自定义聚集函数的例子:http://yangtingkun.itpub.net/post/468/3380


对于下面这个利用自定义聚集函数的例子,将其改写为直接用SQL实现:

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID
-------------------------------------------------- ------- ----------
SY_NAME SYNONYM
T TABLE
TEST TABLE
TEST1 TABLE
T_BLOB TABLE
T_CLOB TABLE
V_T VIEW
V_TEST VIEW

已选择8行。

SQL> SELECT TABTYPE, F_LINK(TNAME) TNAME FROM TAB GROUP BY TABTYPE;

TABTYPE TNAME
------- --------------------------------------------------
SYNONYM SY_NAME
TABLE T,TEST1,T_CLOB,T_BLOB,TEST
VIEW V_T,V_TEST

除了利用自定义聚集函数外,SQL函数中能将多个字符串合并在一起的只有SYS_CONNECT_BY_PATH了。

而这个函数只能应用在树型查询中,为了能使用这个函数,必须人为的构造出树来。也就是说,必须可以构造出一个CONNECT BY列使得相同的TABTYPETNAME可以用SYS_CONNECT_BY_PATH连接起来。

连接列可以使用ROW_NUMBER() OVER()来构造,在CONNECT BY的时候指定当前列的等于父列的值加1。并在START WITH时指定起始值为1

最后对TABTYPE进行分组,取得最大值就是最终需要的结果:

SQL> SELECT TABTYPE, MAX(LTRIM(SYS_CONNECT_BY_PATH(TNAME, ','), ',')) TNAME
2 FROM
3 (
4 SELECT TABTYPE, TNAME, ROW_NUMBER() OVER(PARTITION BY TABTYPE ORDER BY TNAME) RN
5 FROM TAB
6 )
7 START WITH RN = 1
8 CONNECT BY PRIOR RN + 1 = RN
9 AND PRIOR TABTYPE = TABTYPE
10 GROUP BY TABTYPE;

TABTYPE TNAME
------- --------------------------------------------------
SYNONYM SY_NAME
TABLE T,TEST,TEST1,T_BLOB,T_CLOB
VIEW V_T,V_TEST

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69399/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle9i的1467错误
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10353139