首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >被sqlplus的by命令弄糊涂了

被sqlplus的by命令弄糊涂了
EN

Stack Overflow用户
提问于 2015-02-05 07:40:35
回答 1查看 2.2K关注 0票数 0

来自用于休息的sqlplus文档

当指定多个on子句时,sqlplus将搜索从第一个on子句到最后一个on子句的中断。当它找到一个中断时,它将以相反的顺序执行操作,从最后到第一个。

我连接到scott模式并进行了一些测试:

代码语言:javascript
代码运行次数:0
运行
复制
SQL> break on deptno skip 1 on job skip 2
SQL> break
break on deptno skip 1 nodup
      on job skip 2 nodup

SQL> select deptno, job from emp order by deptno, job;    

    DEPTNO JOB
---------- ---------

        10 CLERK


           MANAGER


           PRESIDENT



        20 ANALYST

    DEPTNO JOB
---------- ---------
        20 ANALYST


           CLERK



           MANAGER




    DEPTNO JOB
---------- ---------
        30 CLERK


           MANAGER


           SALESMAN






 14 rows selected.

 SQL>

打印第一行(10,办事员)后,作业发生变化,它只跳过2行,为什么不跳3行呢?在第二页中,有两个位置sqlplus跳过3行。在报告的末尾跳过5行。只是不知道当指定多个on子句时,它是如何决定跳过多少行的。

EN

回答 1

Stack Overflow用户

发布于 2015-02-05 08:19:46

打印第一行(10,办事员)后,作业发生变化,它只跳过2行,为什么不跳3行呢?

当你提到工作中的 2时,它为什么会跳过3行?SQL*Plus完全按照您的要求执行,跳过2行。

在第二页中,有两个位置sqlplus跳过3行。

这是因为您还提到了中断在上跳过1,因此,对于一个新部门,还有一行跳过了。因此,工作跳过了2行,部门跳过了1行,因此总共跳过了3行。

此外,对于20部门,有2分析师2办事员,因此它跳过了每个任务的2行。

代码语言:javascript
代码运行次数:0
运行
复制
SQL> break on job skip 2
SQL> select deptno, job from emp order by deptno, job;

    DEPTNO JOB
---------- ---------
        10 CLERK


        10 MANAGER


        10 PRESIDENT


        20 ANALYST
        20


        20 CLERK
        20


        20 MANAGER


        30 CLERK


        30 MANAGER


        30 SALESMAN
        30
        30
        30



14 rows selected.

SQL>

在报告的末尾跳过5行。

因为,在部门30的最后,有4名推销员,在显示总行数消息之前,总是会有额外的一行。

代码语言:javascript
代码运行次数:0
运行
复制
SQL> set pagesize 50
SQL> select deptno, job from emp order by deptno, job;

    DEPTNO JOB
---------- ---------
        10 CLERK
        10 MANAGER
        10 PRESIDENT
        20 ANALYST
        20 ANALYST
        20 CLERK
        20 CLERK
        20 MANAGER
        30 CLERK
        30 MANAGER
        30 SALESMAN
        30 SALESMAN
        30 SALESMAN
        30 SALESMAN

14 rows selected.

SQL>

理解这一点的最佳方法是,添加另一列而不带任何跳过--例如,添加empno并查看实际跳过的行。

代码语言:javascript
代码运行次数:0
运行
复制
SQL> break on deptno skip 1 on job skip 2
SQL> select empno, deptno, job from emp order by deptno, job;

     EMPNO     DEPTNO JOB
---------- ---------- ---------
      7934         10 CLERK


      7782            MANAGER


      7839            PRESIDENT



      7788         20 ANALYST
      7902


      7876            CLERK
      7369


      7566            MANAGER



      7900         30 CLERK


      7698            MANAGER


      7654            SALESMAN
      7521
      7499
      7844




14 rows selected.

SQL>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28338595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档