select max (week_id)   from mocha.open_order_fact_week;
单独执行这句,可以执行成功。
但在存储过程中运行
select max (week_id) week_id  into v_last_partation from mocha.open_order_fact_week;mocha是用户
却报错:
错误信息:PLS-00201: identifier 'MOCHA.OPEN_ORDER_FACT_WEEK' must be declared请各位帮我解决。

解决方案 »

  1.   

    create or replace procedure rsn2540w_open_orders  ()
    authid current_user IS     
          
        v_last_partation           varchar(25);
      
    beginselect max (week_id) week_id  into v_last_partation from mocha.open_order_fact_week;dbms_output.put_line(v_last_partation);end rsn2540w_open_orders ;
      

  2.   

    是在MOCHA这个schema下创建的存储过程吗?
      

  3.   

    http://topic.csdn.net/u/20081229/15/B4D10400-6E72-4C83-B2C5-60B0C0B5B377.html
    /*这贴的5楼4不4正解*/
      

  4.   

    connect mocha/口令
    grant select on open_order_fact_week to 存储过程所在的用户;
      

  5.   

    首先说解决办法,再说为什么。
    解决办法:
    以用户:mocha 或者SYS 登录对创建该存储过程的用户授权:
    只授予查询权限:
    GRANT SELECT ON mocha.open_order_fact_week TO <创建过程的用户>;
    授予所有权限:
    GRANT ALL ON mocha.open_order_fact_week TO <创建过程的用户>;
    执行完成后,将过程重新编译,应该就没有问题了,这也是我们很多同事已经经常遇到的一个事情。这就是权限问题,其实虽然你在那边使用SELECT语句可以查询,但是并不代表有权限,在权限运行上,ORACLE对于用户查询常用的SQL,是可以直接通过用户名直接得到的,但是在程序中运行,必须要有相应的权限控制,好比是你可以看看数据是什么样的,但要通过程序和我建立关系,我要授权给你才行。