sql - 在立即执行中使用授权管理选项时如何解决错误
问题描述
我正在尝试运行以下脚本。在 EXECUTE IMMEDIATE 中没有“WITH ADMIN OPTION”的情况下,我的脚本可以正常工作。但是当使用“ WITH ADMIN OPTION”时,我得到以下错误。
“错误报告 - ORA-00900:无效的 SQL 语句 ORA-06512:在第 17 00900 行。00000 - “无效的 SQL 语句””。
SET SERVEROUTPUT ON;
DECLARE
v_Model_UserName VARCHAR2(30) := UPPER('&Model_UserName');
v_Cloned_UserName VARCHAR2(30) := UPPER('&Cloned_UserName');
v_dba_role_privs VARCHAR2(3000); -- for dba_role_privs
--- selecting the roles from model user (from dba_role_privs table)
CURSOR c_role_privs (var01 Varchar2 )is
SELECT granted_role from dba_role_privs where grantee = var01;
BEGIN
--- granting the roles from model user to cloned user (from dba_role_privs table)
OPEN c_role_privs (v_Model_UserName);
LOOP
FETCH c_role_privs INTO v_dba_role_privs;
EXIT WHEN c_role_privs%NOTFOUND;
EXECUTE IMMEDIATE 'grant'||v_dba_role_privs||' to '||v_Cloned_UserName||' WITH ADMIN OPTION';
END LOOP;
CLOSE c_role_privs;
END;
/
解决方案
尝试在grant
关键字后添加一个空格:
EXECUTE IMMEDIATE 'grant '||v_dba_role_privs||' to '||v_Cloned_UserName||' WITH ADMIN OPTION';
推荐阅读
- python - 在 sympy 中以十进制而不是精确值返回解决方案
- python - 将字典列表与熊猫系列进行比较并根据匹配填充字典
- java - JDBC 测试连接正常,但无法用 Spring Boot 生成实体类
- mysql - MySql 8 没有使用空间索引
- swift - 是否有 NSOpenPanel 替代方案,或者面板在 SwiftUI 中的样式可以不同吗?
- angular - 如何在 Angular 中生成服务器端会话变量?
- php - laravel 为内核中的运行命令设置时间表
- react-native - 如何将动态 URL 设置为 webview?
- javascript - 保存“办公时间”数据的正确方法是什么?
- python - 合并数据框不是基于索引而是值