【问题标题】:PL/SQL looping through PDBsPL/SQL 循环通过 PDB
【发布时间】:2019-06-16 01:52:37
【问题描述】:

我正在尝试编写一个 PL/SQL 脚本来循环遍历所有可插拔数据库,执行一项任务并产生一个输出。下面的代码是我到目前为止所做的。我不确定出了什么问题,但我得到的错误是 PLS-00306:调用“PUT_LINE”时参数的数量或类型错误 我不知道为什么。有人可以帮忙吗?

declare
type names_t is table of v$pdbs.name%type;
names names_t;
--vname names_t;
type open_modes_t is table of v$pdbs.open_mode%type;
open_modes open_modes_t;
type privilege_user_t is table of dba_sys_privs.privilege%type;
privilege_user privilege_user_t;
begin
        select name, open_mode
        bulk collect
        into names, open_modes
        from v$pdbs
        where name not in ('PDB$SEED' , 'DCPDB01');
                for j in 1 .. names.count()
                loop
                if open_modes (j) <> 'MOUNTED'
                then
                execute immediate 'alter session set container= "' || names (j) || '"';
                end if;
                --select name bulk collect into vname from v$pdbs;
                select grantee bulk collect into privilege_user from dba_sys_privs
                where (privilege like '%ANY%' or privilege ='DBA') and grantee like 'U%'
                group by  grantee, privilege
                order by grantee;
                DBMS_OUTPUT.put_line(privilege_user);
        end loop;
end;
/

【问题讨论】:

  • DBMS_OUTPUT.put_line(privilege_user(j).[column_name]);

标签: oracle plsql dbms-output


【解决方案1】:

DBMS_OUTPUT.put_line() 需要一个字符串作为参数。您正在向它传递一个类型为 dba_sys_privs.privilege%type 的表。

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 2017-06-29
    • 2014-06-19
    • 2015-10-20
    • 2012-01-31
    • 1970-01-01
    • 2013-09-13
    • 2012-03-27
    • 2017-07-30
    相关资源
    最近更新 更多