尤其是NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
这样的写法到底是什么意思

解决方案 »

  1.   

    学习!‘X’代表什么东东?ROWID(+)是怎么的回事?
      

  2.   

    to 楼主: 我实在看不出那条sql 语句效率能有多高...
     明天要是有空我做个plan看看。
      

  3.   

    7.     减少访问数据库的次数当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量. 例如,    以下有三种方法可以检索出雇员号等于0342或0291的职员. 方法1 (最低效)    SELECT EMP_NAME , SALARY , GRADE    FROM EMP     WHERE EMP_NO = 342;     SELECT EMP_NAME , SALARY , GRADE    FROM EMP     WHERE EMP_NO = 291;方法2 (次低效)       DECLARE         CURSOR C1 (E_NO NUMBER) IS         SELECT EMP_NAME,SALARY,GRADE        FROM EMP         WHERE EMP_NO = E_NO;    BEGIN         OPEN C1(342);        FETCH C1 INTO …,..,.. ;                OPEN C1(291);       FETCH C1 INTO …,..,.. ;         CLOSE C1;      END;方法3 (高效)    SELECT A.EMP_NAME , A.SALARY , A.GRADE,            B.EMP_NAME , B.SALARY , B.GRADE    FROM EMP A,EMP B    WHERE A.EMP_NO = 342    AND   B.EMP_NO = 291; 注意:在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200.
      

  4.   

    楼上兄弟还是没有说明NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
    的啊。
      

  5.   

    看看NVL的函数就知道了啊。'x' 没什么意思,就是一个字符串啊。你愿意的话就改称'y'好了。:)
      

  6.   

    NVL(B1, B2) 如B1为空则返回B2,如B1不空则返回B1这回你明白了吧!
      

  7.   

    to shahand(死磕):
    以下有三种方法可以检索出雇员号等于0342或0291的职员.
    -------------------------------------------------
    为什么不能这样写??
    难道这样效率也很低??
    SELECT EMP_NAME , SALARY , GRADE
    FROM EMP
    WHERE EMP_NO = 342 OR EMP_NO = 291;而且你提供的第三种查询方式获取的记录是横向的,很少见哟
      

  8.   

    NVL已经用的很熟了
    但NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
    无论什么时候都会返回X,这样写有什么意义。
    或者什么时候会返回X.DUMMY.
      

  9.   

    EMP_NO,DPT_NO ,CAT_TYPE 不是主键?
    如果是的话不用那么繁吧