创建了个函数,不知道为什么会出现下面的编译错误,请高手指点下!SQL> create or replace function Aver_Sal(ID HR.JOBS.JOB_ID%TYPE) return char AS
  2  msg char(50);
  3  begin
  4  select JOB_TITLE into msg from HR.JOBS where JOB_ID=ID;
  5  return msg;
  6  end;
  7  /警告: 创建的函数带有编译错误。SQL> show error
FUNCTION AVER_SAL 出现错误:LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
1/22     PLS-00201: 必须说明标识符 'HR.JOBS'
SQL>
他说必须指明标识符,HR方案中有表JOBS。
为什么会出现这样的错误?

解决方案 »

  1.   

    去掉schema的名字HR,换成 (ID JOBS.JOB_ID%TYPE)
    当然前提是JOBS表建了公共SYNONYM
      

  2.   

    我当前使用的用户名是system啊!~
    而且我也去过前面的HR试过了,出现了编译错误;真不晓得是什么原因啊!
    SQL> create or replace function Aver_Sal(ID JOBS.JOB_ID%TYPE)
         return char AS
      2  msg char(50);
      3  begin
      4  select JOB_TITLE into msg from JOBS where JOB_ID=ID;
      5  return msg;
      6  end;
      7  /警告: 创建的函数带有编译错误。SQL> show error
    FUNCTION AVER_SAL 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    0/0      PL/SQL: Compilation unit analysis terminated
    1/22     PLS-00201: 必须说明标识符 'JOBS.JOB_ID'
      

  3.   


    你确定HR用户下有JOBS表,该表下有JOB_ID字段?
      

  4.   

    恩,我确定啊!网络
      |
       数据库
             |
             ORCL_SYSTEM AS SYSDBA
                |
                例程
                     |
                    方案
                          |
                        HR
                          |
                           表
                                |
                             JOBS
    里面有JOB_ID字段。你知道是什么原因么?谢谢啦
                                
      

  5.   

    我试过去掉HR了,但是还是不行啊!
    但是你说的JOBS表建立公共SYNONYM是什么意思,我不是很明白啊!能给我讲讲具体事怎么弄的吗?谢谢你啊
      

  6.   

    谢谢你啊!果然是你说的,我的HR一开始没有设置DBA权限!设置了权限之后就没有这样的编译错误了!
    但是我还是有个问题想问下你,只有DBA权限的用户才能创建函数吗?谢谢你呀!
      

  7.   


    谢谢你啊!果然是你说的,我的HR一开始没有设置DBA权限!设置了权限之后就没有这样的编译错误了! 
    但是我还是有个问题想问下你,只有DBA权限的用户才能创建函数吗?谢谢你呀!
      

  8.   


    grant create procedure to hr;或者给resource的role权限grant resource to hr;