更新时间:2024-08-20 GMT+08:00
层次递归查询函数
层次递归查询语句中可使用以下函数返回连接路径上的相关信息。
- sys_connect_by_path(col, separator)
描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。
参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT/INT1/INT2/INT4/INT8/FLOAT4/FLOAT8/NUMERIC的列,参数separator为路径节点之间的分隔符。当前该函数col输入不支持表达式输入。
返回值类型:text
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
--建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, sys_connect_by_path(name, '-') FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | sys_connect_by_path ----+-----+------+--------------------- 1 | 0 | a | -a 2 | 1 | b | -a-b 4 | 1 | d | -a-d 3 | 2 | c | -a-b-c (4 rows) --恢复环境。 gaussdb=# DROP TABLE IF EXISTS connect_by_table; DROP TABLE
- connect_by_root(col)
描述:仅在层次递归查询中适用,用于返回当前行最顶层父亲行中某列的值。
参数col为输出列的名称。
返回值类型:即为所指定列col的数据类型。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
--建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, connect_by_root(name) FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | connect_by_root ----+-----+------+----------------- 1 | 0 | a | a 2 | 1 | b | a 4 | 1 | d | a 3 | 2 | c | a (4 rows) --恢复环境。 gaussdb=# drop table if exists connect_by_table; DROP TABLE
父主题: 函数和操作符