zoukankan      html  css  js  c++  java
  • [20170916]sqlplus set array最小2补充.txt

    [20170916]sqlplus set array最小2补充.txt

    --//以前写的贴子,链接http://blog.itpub.net/267265/viewspace-1453652/
    --//上面提到设置array=1或者array=2.执行sql语句输出的逻辑读是一样的,所以得到一个结论.
    --//set array最小是2.
    --//我也在http://blog.itpub.net/267265/viewspace-2138596/里面提到.fetch 与arraysize的关系.
    --//是先fetch 1,arraysize,.....输出是arraysize,每次在输出缓存中保留1条.
    --//所以看到的输出arraysize,arraysize条记录,剩下的记录.

    --//但是今天我测试发现如果arraysize=1,输出有点不同通过例子说明:

    1.环境:
    SCOTT@test01p> @ ver1
    PORT_STRING                    VERSION        BANNER                                                                               CON_ID
    ------------------------------ -------------- -------------------------------------------------------------------------------- ----------
    IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

    GRANT EXECUTE ON SYS.DBMS_LOCK TO SCOTT;

    CREATE OR REPLACE FUNCTION SCOTT.sleep (seconds IN NUMBER)
    RETURN NUMBER AS
    BEGIN
      sys.dbms_lock.sleep(seconds);
      RETURN seconds;
    END;
    /

    --//如果写成如何,留给大家测试.
    CREATE OR REPLACE FUNCTION SCOTT.sleep1 (seconds IN NUMBER)
    RETURN NUMBER
    DETERMINISTIC
    AS
    BEGIN
      sys.dbms_lock.sleep(seconds);
      RETURN seconds;
    END;
    /


    2.测试:
    --//arraysize=1
    SCOTT@test01p> set arraysize 0
    SP2-0267: arraysize option 0 out of range (1 through 5000)
    SCOTT@test01p> set arraysize 1
    SCOTT@test01p> select empno, ename, deptno, sleep (1) n1  from emp;
         EMPNO ENAME          DEPTNO         N1
    ---------- ---------- ---------- ----------
          7369 SMITH              20          1
          7499 ALLEN              30          1
          7521 WARD               30          1
          7566 JONES              20          1
          7654 MARTIN             30          1
          7698 BLAKE              30          1
          7782 CLARK              10          1
          7788 SCOTT              20          1
          7839 KING               10          1
          7844 TURNER             30          1
          7876 ADAMS              20          1
          7900 JAMES              30          1
          7902 FORD               20          1
          7934 MILLER             10          1
    14 rows selected.

    --//你可以发现先输出1行,然后才是2,2,2.
    SCOTT@test01p> set arraysize 2
    SCOTT@test01p> select empno, ename, deptno, sleep (1) n1  from emp;
    ...

    --//你可以发现先输出2行(注不是1行),然后才是2,2,2.为什么存在这个小小的区别呢?跟踪看看.

    3.跟踪:
    set arraysize 1
    @10046on 12
    select empno, ename, deptno, sleep (1) n1  from emp;
    @ 10046off

    D: ools lwrap>grep FETCH D:apporaclediag dbms est est race est_ora_5436.trc
    grep FETCH D:apporaclediag dbms est est race est_ora_5436.trc
    FETCH #821664400:c=0,e=1002980,p=0,cr=5,cu=0,mis=0,r=1,dep=0,og=1,plh=3956160932,tim=10059543349
    FETCH #821664400:c=0,e=2000348,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10061547530
    FETCH #821664400:c=0,e=2000175,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10063548611
    FETCH #821664400:c=0,e=1999935,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10065549649
    FETCH #821664400:c=0,e=2000097,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10067550708
    FETCH #821664400:c=0,e=2000102,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10069551690
    FETCH #821664400:c=0,e=2000276,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=3956160932,tim=10071552866
    FETCH #821664400:c=0,e=999906,p=0,cr=3,cu=0,mis=0,r=1,dep=0,og=1,plh=3956160932,tim=10072553662

    --//从这里也可以看出arraysize最小是2.
    --//至于为什么arraysize=1的情况下那样输出,我仅仅猜测在执行过程中修正了arraysize=2,其中的细节不好解析了.
    --//在11g下测试结果一样!!

  • 相关阅读:
    set<char*>s
    sscanf()函数。
    C语言函数sscanf()的用法 (转载
    zjut 1179 平均数
    C++数据间隔
    C++ 保留小数
    c++ 保留小数
    c语言 保留两位小数
    c++ 如何实现保留小数并 且 不进行四舍五入
    uva-657-搜索
  • 原文地址:https://www.cnblogs.com/lfree/p/7541463.html
Copyright © 2011-2022 走看看