更新语句无法正常获取错误ORA-01031:权限不足

时间:2014-08-15 17:51:42

标签: sql oracle

我的更新表查询无效。如果我正在运行这个查询作为子部分它正在工作,但一旦我作为一个整体运行它给我异常ORA-01031:权限不足。

 declare
         var_sqlString varchar2(2500);
         begin    
    var_sqlString :='UPDATE (select ''A''||registration_id from sde.table_registry where table_name=''OPENPOINT'' and OWNER=''EDGIS'') 
    SET OPERATINGVOLTAGE=''21'' where GLOBALID=''{3B5C4257-12D8-4CA9-82E4-427AC9D79BB0}''' ;
    dbms_output.put_line(var_sqlString); 
          EXECUTE immediate var_sqlString;
          commit;        
         end;

当我执行此查询时dbms_output.put_line给我下面的结果。

UPDATE (select 'A'||registration_id from sde.table_registry where table_name='OPENPOINT' and OWNER='EDGIS') 
SET OPERATINGVOLTAGE='21' where GLOBALID='{3B5C4257-12D8-4CA9-82E4-427AC9D79BB0}'

当我运行上述查询时,我也得到同样的错误。现在的问题是当我执行第一部分时:select 'A'||registration_id from sde.table_registry where table_name='OPENPOINT' and OWNER='EDGIS' 它给我的结果是A126,然后我将结果传递给我的更新语句,更新语句工作正常。但总的来说还不行.......

2 个答案:

答案 0 :(得分:0)

错误Insufficient privileges告诉您不允许您在此表上执行UPDATE语句。

检查您用于此查询的用户的用户权限。您应该为您正在使用的用户授予UPDATE权限。

您可以阅读how to manage user privileges上的Oracle文档。

答案 1 :(得分:0)

我找到了解决方案,问题是Oracle将表检索语句整体视为不是表,所以这就是我的问题的原因。所以我在查询开头添加了select语句并得到了输出。 所以更新的查询将是

set serveroutput on
declare
     var_sqlString varchar2(2500);
     begin

select 'UPDATE edgis.' || 
(select 'A'||registration_id from sde.table_registry where table_name='OPENPOINT' and OWNER='EDGIS') 
|| ' SET OPERATINGVOLTAGE=''21'' where GLOBALID=''{3B5C4257-12D8-4CA9-82E4-427AC9D79BB0}'''  into var_sqlString from dual;
dbms_output.put_line(var_sqlString);  
      EXECUTE immediate var_sqlString;
     commit;  
     end;

谢谢!为了帮助我,但我找到了解决方案。