我的更新表查询无效。如果我正在运行这个查询作为子部分它正在工作,但一旦我作为一个整体运行它给我异常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
,然后我将结果传递给我的更新语句,更新语句工作正常。但总的来说还不行.......
答案 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;
谢谢!为了帮助我,但我找到了解决方案。