【发布时间】:2018-07-16 07:41:06
【问题描述】:
我使用 Flyway 和用于创建和填充模式的 HANA JDBC 驱动程序设置了 HANA 数据库部署。作为部署的一部分,我还想做的事情是授予特定数据库角色对该模式的读取访问权限。不过为了避免迁移错误,我还是先验证一下这个角色是否存在,无法让这部分逻辑工作。
离我最近的是
DO
BEGIN
DECLARE I INTEGER;
SELECT COUNT(*) INTO I
FROM roles
WHERE role_name = 'MYROLE';
IF I > 0
THEN
GRANT SELECT ON SCHEMA myschema TO MYROLE;
END IF;
END;
但这失败了
SQL State : HY000
Error Code : 7
Message : SAP DBTech JDBC: [7] (at 140): feature not supported: DDL statements other than CREATE/DROP TABLE is/are not supported in anonymous block: line 9 col 9 (at pos 140)
Location : db/migration/V1.10__my_script.sql (snip)
Line : 1
Statement : DO
我还通过尝试创建一个临时存储过程并执行该过程来尝试这个 - 不支持 DDL 语句的同样问题。
问题:
- 我需要根据选择查询的结果执行 IF-THEN-ELSE
- HANA 似乎不支持在 IF 子句中嵌套 SELECT 语句,因此我需要将结果保存在变量中并改用它
- 仅支持在块内部声明变量,例如匿名块或存储过程的主体
- 块也禁止执行大多数 DDL 语句 -
GRANT就是其中之一。
在这一点上,我不确定我正在尝试做的事情是否可能。指针将不胜感激。
【问题讨论】: