ITPub博客

首页 > 数据库 > 国内数据库 > lightdb -- 兼容Oracle -- 支持 connect by rownum

lightdb -- 兼容Oracle -- 支持 connect by rownum

原创 国内数据库 作者:Hanson69 时间:2024-03-29 17:02:39 0 删除 编辑

介绍

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
专注于PostgreSQL数据库的研究

注册时间:2020-08-30

  • 博文量
    16
  • 访问量
    11392