授予授权的过程,无效的表名错误

Posted

技术标签:

【中文标题】授予授权的过程,无效的表名错误【英文标题】:Procedure which gives grants, Invalid table name error 【发布时间】:2017-02-06 14:13:42 【问题描述】:

我正在尝试创建一个授予特定架构对象的过程。程序似乎可以编译,但执行时会出错。

这个简单的过程有问题,但我找不到原因。

程序:

create or replace procedure ch.grants_to_schema_objects(
          i_target_schema varchar2, 
          i_target_user varchar2) as
begin
 for mt in (SELECT 'GRANT SELECT ON ' || chr(39) 
              || i_target_schema || chr(39) 
              || '.' || TABLE_NAME || ' TO ' || chr(39) 
              || i_target_user || chr(39)
              || ' WITH GRANT OPTION' as grnt 
          FROM ALL_TABLES 
          WHERE OWNER = i_target_schema) loop
  dbms_output.put_line(mt.grnt);
  execute immediate mt.grnt;
end loop;
end;

呼叫:

 execute ch.grants_to_schema_objects('SR', 'CH');

错误:

ORA-06512: "CH.GRANTS_TO_SCHEMA_OBJECTS", line 5
ORA-06512: line 1
00903. 00000 -  "invalid table name"
*Cause:    
*Action:

【问题讨论】:

为什么是 chr(39)?你可能不需要它。您可能需要双引号 (") 来处理小写对象(如果有) 在错误发生前你得到的输出是什么(假设你有set serveroutput on)?手动运行时会发生什么?正如 Aleksej 所说,架构和用户名周围的引号不正确。 【参考方案1】:

CHR(39) 正在破坏它。将其替换为CHR(34):它是",您需要分隔您的用户名,而不是'

【讨论】:

以上是关于授予授权的过程,无效的表名错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13 位置授权流程中的错误?

AuthorizeRequestValidator:错误:无效的客户端授予类型:隐式

反映加密的 Access 数据库时出现“无效密码”错误

无效的对象名称“表名”

“错误:” “Unsupported_grant_type” 使用 OAuth 2.0,Owin。密码授予和授权授予

INSTAGRAM:授予公共内容范围的权限,但仍然访问令牌给出未授权的错误