connect by rownum 用于生成序列,首先获取表中的所有记录,然后为获取的第一条记录生成 N 个孩子节点。

connect by rownum 用于生成序列,完全可以通过 PG 的 `generate_series` 函数代替
`SELECT ... FROM DUAL CONNECT BY rownum <=10`
等价于
`SELECT ... FROM generate_series (...)`
lightdb支持了 CONNECT BY rownum 语法,支持场景如下:
-- 生成序列 select rownum from dual CONNECT BY rownum <= 6; rownum -------- 1 2 3 4 5 6 (6 rows) -- rownum表达式 select rownum from duals CONNECT BY rownum + 2 - 1 <= 2 + 2; rownum -------- 1 2 3 (3 rows) SELECT empno, ename, mgr, LEVEL FROM emp_ CONNECT BY rownum + empno < 3; ERROR: connect by rownum does not support rownum Op column LINE 7: emp_ CONNECT BY rownum + empno < 3; ^ select rownum from duals CONNECT BY 6 > rownum * 2; ERROR: connect by rownum does not support Multiplication or division operation LINE 4: duals CONNECT BY 6 > rownum * 2; ^ -- 生成序列,对序列增加Non-SPJ操作 select rownum from dual CONNECT BY rownum <= 6 ORDER BY 1 DESC LIMIT 2; rownum -------- 6 5 (2 rows) -- 绑定变量 PREPARE my_query (VARCHAR) AS select rownum from duals CONNECT BY rownum <= $1; EXECUTE my_query(6); rownum -------- 1 2 3 4 5 6 (6 rows) -- 不支持多表 SELECT empno, ename, mgr, LEVEL FROM emp_, emp_2 where emp_.empno = emp_2.mgr CONNECT BY rownum <= 6; ERROR: connect by rownum not support multi tables SELECT empno, ename, mgr, LEVEL FROM emp_ join emp_2 on emp_.empno = emp_2.mgr CONNECT BY rownum <= 6; ERROR: connect by rownum not support multi tables -- 函数 CREATE OR REPLACE FUNCTION generate_rownums(limit_value BIGINT) RETURNS SETOF BIGINT AS $$ BEGIN RETURN QUERY select rownum from duals CONNECT BY rownum <= limit_value; END; $$ LANGUAGE plpgsql; select generate_rownums(6); generate_rownums ------------------ 1 2 3 4 5 6 (6 rows)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69982913/viewspace-3010953/ ,如需转载,请注明出处,否则将追究法律责任。