我有一个 pl/sql 脚本,我从 sqlplus 会话中作为 'sysdba' 运行。
在执行脚本期间,我想切换到另一个用户,以便我可以为该用户创建一些数据库链接。完成此操作后,脚本应返回“sysdba”进行一些完成。
我尝试使用以下内容:
BEGIN
<do some stuff as sysdba>
execute immediate 'connect ' || in_owner || '/' || v_password;
<create db link for user>
<switch back to sysdba>
END;
然而,“连接”似乎是一个不能与“立即执行”一起运行的命令。
知道如何实现这一点吗?
Thanks!
我不知道如何在 Oracle 中执行此操作,但简单的解决方案是将其放入 SQL 脚本而不是 PL/SQL 块中。
BEGIN
<do some stuff as sysdba>
END;
connect scott/tiger;
<create db link for user>
<switch back to sysdba>
BEGIN
<do other stuff>
END;
编辑:
根据您下面的评论,我为您提供了另一个解决方案。
仍然使用带有一些 PLSQL 的 SQL 脚本,而不是纯粹的 PLSQL 脚本。
这次,动态生成 SQL 脚本来创建链接,然后运行它。
复杂的问题可能在于如何找出每个用户的密码。
BEGIN
<do some stuff as sysdba>
END;
set serverout on;
spool create_links.sql
BEGIN
for <loop over each user> loop
dbms_output.put_line('connect ' || user || '/' || pass ';');
dbms_output.put_line('<create db link for user>;');
end loop;
END;
spool off;
@@create_links.sql;
<switch back to sysdba>
BEGIN
<do other stuff>
END;
最后,如果这不起作用,您可以编写一个过程,使用“AUTHID CURRENT_USER”动态创建触发器。这使得过程作为调用者而不是所有者运行。看here http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/13_elems37.htm#35565了解如何在定义过程时使用 AUTHID 关键字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)