执行下面的procedure时提示我“ORA-01031:权限不足”,应该如何改写下面的procedure呢?
create or replace procedure pro_aaa (vew_name varchar2) as
       dysql   varchar2(800);   
begin   
       dysql := 'create or replace view aaa_lijm
         as select a.s_wage_id ,
         SUM(CASE WHEN a.s_item_code = 1001 then a.n_item_value else 0 end) as item1001,
         SUM(CASE WHEN a.s_item_code = 1002 then a.n_item_value else 0 end) as item1002,
         SUM(CASE WHEN a.s_item_code = 1003 then a.n_item_value else 0 end) as item1003,
         SUM(CASE WHEN a.s_item_code = 1004 then a.n_item_value else 0 end) as item1004,
         SUM(CASE WHEN a.s_item_code = 1005 then a.n_item_value else 0 end) as item1005,
         SUM(CASE WHEN a.s_item_code = 1006 then a.n_item_value else 0 end) as item1006
         from WA_DATA a group by a.s_wage_id';   
     
execute immediate dysql;   
end;

解决方案 »

  1.   

    grant execute on *** to ***
      

  2.   

    写在哪里?我是这样写的:
    create or replace procedure pro_aaa (vew_name varchar2) as
           dysql   varchar2(800);   
    begin   
           dysql := 'create or replace view aaa_lijm
             as select a.s_wage_id ,
             SUM(CASE WHEN a.s_item_code = 1001 then a.n_item_value else 0 end) as item1001,
             SUM(CASE WHEN a.s_item_code = 1002 then a.n_item_value else 0 end) as item1002,
             SUM(CASE WHEN a.s_item_code = 1003 then a.n_item_value else 0 end) as item1003,
             SUM(CASE WHEN a.s_item_code = 1004 then a.n_item_value else 0 end) as item1004,
             SUM(CASE WHEN a.s_item_code = 1005 then a.n_item_value else 0 end) as item1005,
             SUM(CASE WHEN a.s_item_code = 1006 then a.n_item_value else 0 end) as item1006
             from WA_DATA a group by a.s_wage_id';   
             grant execute on aaa_lijm to 'BIZDATA1'
    execute immediate dysql;   
    end;
    但是提示:
    Error: PLS-00103: 出现符号 "GRANT"在需要下列之一时:
           begindeclareendexception
              exitforgotoifloopmodnullpragmaraisereturnselectupdatewhile
              <an identifier><a double-quoted delimited-identifier>
              <a bind variable><<closecurrentdeletefetchlockinsertopen
              rollbacksavepointsetsqlexecutecommitforall
              <a single-quoted SQL string>
    Line: 13
    Text: grant execute on aaa_lijm to 'BIZDATA1'Error: Hint: Parameter 'vew_name' is declared but never used in 'pro_aaa'
    Line: 1
    Text: create or replace procedure pro_aaa (vew_name varchar2) as
    具体该怎样谢请给明示,本人对oracle初学。因此恳请说的详细些。
      

  3.   

    该用户拥有该权限,执行该存储过程没有问题,只是在执行过程中报告这个错误:ORA-01031:权限不足
      

  4.   

    该问题已经解决,见
    http://community.csdn.net/Expert/topic/5139/5139053.xml?temp=.3845484