DB2 10.5 for Linux, UNIX, and Windows

PRIOR 一元运算符

PRIOR 一元运算符仅适于在分层查询的 CONNECT BY 子句中使用。要获得整个级别的所有下级,必须将 PRIOR 运算符添加到分层查询的 CONNECT BY 子句中。

阅读语法图跳过直观语法图
>>-PRIOR--表达式--------------------------------------------------><

表达式
未包含 NEXT VALUE 表达式、分层查询构造(例如 LEVEL 伪列)、SYS_CONNECT_BY_PATH 函数或 OLAP 函数的任何表达式。如果指定任何这些项目,那么都将返回 SQLSTATE 428H4。

用法

CONNECT BY 子句在分层查询的中间结果表 Hn 与 FROM 子句中指定的源结果表之间执行内连接。如果对 FROM 子句中引用的表进行的列引用是 PRIOR 运算符的自变量,那么所有那些列引用都被视为涉及表 Hn

此运算符的结果数据类型是表达式的结果数据类型。

如以下示例所示,通常将中间结果表 Hn 的主键连接到源结果表的外键,以便以递归方式遍历层次结构:
   CONNECT BY PRIOR T.PK = T.FK
如果主键是组合键,那么对每个列添加前缀 PRIOR,如以下示例所示:
   CONNECT BY PRIOR T.PK1 = T.FK1 AND PRIOR T.PK2 = T.FK2
PRIOR 运算符的优先级高于任何中缀运算符,如加号 (+) 或双竖线 (||)。因此,要传递包含中缀运算符的表达式作为自变量,必须使用括号。需要使用操作数和运算符的圆括号组指示在其中执行操作的目标顺序。例如,以下表达式返回之前行的 FIRSTNME 值与层次结构中实际行的 LASTNAME 值的并置。
   PRIOR FIRSTNME || LASTNAME
该表达式相当于以下列表中的第一个表达式,但不是第二个表达式:
   (PRIOR FIRSTNME) || LASTNAME   PRIOR (FIRSTNME || LASTNAME)

如果指定分层查询的 CONNECT BY 子句的外部 PRIOR 运算符,那么将返回 SQLSTATE 428H4。

示例

  • 以下查询返回 DEPARTMENT 表中部门的层次结构:
       SELECT LEVEL, DEPTNAME
         FROM DEPARTMENT START WITH DEPTNO = 'A00'
         CONNECT BY NOCYCLE PRIOR DEPTNO = ADMRDEPT
    此查询返回以下结果:
    LEVEL       DEPTNAME
    ----------- ----------------------------------------
              1 SPIFFY COMPUTER SERVICE DIV.
              2 PLANNING
              2 INFORMATION CENTER
              2 DEVELOPMENT CENTER
              3 MANUFACTURING SYSTEMS
              3 ADMINISTRATION SYSTEMS
              2 SUPPORT SERVICES
              3 OPERATIONS
              3 SOFTWARE SUPPORT
              3 BRANCH OFFICE F2
              3 BRANCH OFFICE G2
              3 BRANCH OFFICE H2
              3 BRANCH OFFICE I2
              3 BRANCH OFFICE J2