当指定多个on子句时,sqlplus将搜索从第一个on子句到最后一个on子句的中断。当它找到一个中断时,它将以相反的顺序执行操作,从最后到第一个。
我连接到scott模式并进行了一些测试:
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子句时,它是如何决定跳过多少行的。
发布于 2015-02-05 00:19:46
打印第一行(10,办事员)后,作业发生变化,它只跳过2行,为什么不跳3行呢?
当你提到工作中的 2时,它为什么会跳过3行?SQL*Plus完全按照您的要求执行,跳过2行。
在第二页中,有两个位置sqlplus跳过3行。
这是因为您还提到了中断在上跳过1,因此,对于一个新部门,还有一行跳过了。因此,工作跳过了2行,部门跳过了1行,因此总共跳过了3行。
此外,对于20部门,有2分析师和2办事员,因此它跳过了每个任务的2行。
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名推销员,在显示总行数消息之前,总是会有额外的一行。
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并查看实际跳过的行。
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>
https://stackoverflow.com/questions/28338595
复制相似问题