SYS_CONNECT_BY_PATH是一个函数,它在分层查询中用于检索在当前节点和根节点之间出现的指定列的值。

函数的特征为:

SYS_CONNECT_BY_PATH (column, delimiter)

该函数采用两个参数:

  • column 是位于分层查询中指定的表中且调用该函数的列的名称。
  • delimiter 是 varchar 值,用于分隔指定列中的每个条目。

以下示例返回员工名称及其经理的列表;如果经理有上级经理,则该名称会附加到结果中:

polardb=# SELECT level, ename , SYS_CONNECT_BY_PATH(ename, '/') managers
      FROM emp
      CONNECT BY PRIOR empno = mgr
      START WITH mgr IS NULL
      ORDER BY level, ename, managers;
 level | ename  |        managers
-------+--------+-------------------------
     1 | KING   | /KING
     2 | BLAKE  | /KING/BLAKE
     2 | CLARK  | /KING/CLARK
     2 | JONES  | /KING/JONES
     3 | ALLEN  | /KING/BLAKE/ALLEN
     3 | FORD   | /KING/JONES/FORD
     3 | JAMES  | /KING/BLAKE/JAMES
     3 | MARTIN | /KING/BLAKE/MARTIN
     3 | MILLER | /KING/CLARK/MILLER
     3 | SCOTT  | /KING/JONES/SCOTT
     3 | TURNER | /KING/BLAKE/TURNER
     3 | WARD   | /KING/BLAKE/WARD
     4 | ADAMS  | /KING/JONES/SCOTT/ADAMS
     4 | SMITH  | /KING/JONES/FORD/SMITH
(14 rows)

在结果集中:

  • level 列显示该查询返回的级别数。
  • ename 列显示员工名称。
  • managers 列包含经理的层次列表。

PolarDB PostgreSQL版(兼容Oracle)的 SYS_CONNECT_BY_PATH 实现不支持:

  • 在 CONNECT_BY_PATH 内部使用 SYS_CONNECT_BY_PATH。
  • 在 SYS_CONNECT_BY_PATH 内部使用 SYS_CONNECT_BY_PATH。