【发布时间】:2017-11-23 01:28:06
【问题描述】:
在存储函数中,我需要使用一些子选择进行“动态”查询:
CURSOR c_dyn
AS
SELECT 'CREATE SYNONYM '
|| username_parameter_from_function
||'.'
||o.object_name
|| ' FOR '
|| o.OWNER
||'.'
|| o.object_name
||';' AS OUT_SQL
FROM SYS.DBA_OBJECTS o
WHERE o.object_type IN ( 'TABLE', 'VIEW', 'SEQUENCE')
AND o.OWNER IN
(
SELECT DISTINCT x.OWNER
FROM SYS.dba_tab_privs x
WHERE x.GRANTEE IN
(
SELECT DISTINCT p.granted_role
FROM SYS.dba_role_privs p
WHERE p.GRANTEE=username_parameter_from_function
)
AND NOT OWNER LIKE 'SYS%'
);
这里我们有一些“子”选择和一个来自函数的参数。这不适用于函数。任何想法如何“重新建模”这个?或者mabye更改功能以获得相同的结果?或者有没有办法让它按原样工作......?
谢谢! M
【问题讨论】:
-
当您尝试通过函数使用它时遇到什么错误?
-
发布您的完整功能和错误。您应该打开光标进行选择查询。
-
我得到一个“表或视图不存在”。我解决了它直接在 DBA_TAB_PRIVS 和 DBA_ROLE_PRIVS 和 DBA_OBJECTS 上为用户设置选择授权(即使用户具有 DBA 和其他角色)...
标签: oracle plsql oracle11g oracle12c