过程query_employee如下:CREATE OR REPLACE PROCEDURE query_employee
(eno NUMBER,name OUT VARCHAR2,salary OUT NUMBER)
IS
BEGIN
SELECT ename,sal INTO name,salary FROM emp
WHERE empno=eno;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,'该雇员不存在');
END;
/执行后:SQL> @g:\orcl\procedure3.sqlSP2-0804: 过程已创建, 但带有编译警告SQL> SHOW ERRORS
PROCEDURE QUERY_EMPLOYEE 出现错误:LINE/COL ERROR
-------- -------------------------------------------------------------
2/14     PLW-07203: 使用 NOCOPY 编译器提示可能对参数 'NAME' 有所帮助我将过程中的参数name OUT VARCHAR2改为name OUT NOCOPY VARCHAR2 就不会出现这个警告。
不明白的是同样是输出参数,salary OUT NUMBER不加NOCOPY就不会出现警告呢?使用的是oracle 11g,运行以上代码时要将显示警告打开,如下:SQL> alter session set plsql_warnings='disable:performance';会话已更改。SQL> @g:\orcl\procedure3.sql过程已创建。
我的问题:
将过程中的参数name OUT VARCHAR2改为name OUT NOCOPY VARCHAR2 就不会出现这个警告。
不明白的是同样是输出参数,salary OUT NUMBER不加NOCOPY就不会出现警告呢?

解决方案 »

  1.   

    有个地方写错了
    将上面的这句
    alter session set plsql_warnings='disable:performance';
    改为
    alter session set plsql_warnings='enable:performance';
      

  2.   

    数据库默认是:disable:all,所以一般情况下不会出现警告信息的.
    nocopy主要是针对in|out record/index-by table/varray/varchar2提高效率使用的,
    对于number使用nocopy与否基本没有影响.所以在'enable:performance'情况下不会对number提示warning.
      

  3.   

    NOCOPY是用来提高性能的,具体怎么用,能讲解下吗?