Sql 如何列出数据库中用户的所有表?N

Sql 如何列出数据库中用户的所有表?N,sql,database,oracle,plsql,oracle-sqldeveloper,Sql,Database,Oracle,Plsql,Oracle Sqldeveloper,嗨,我有以下计划: 我想写一个脚本,它调用另一个脚本。参数V_USERNAME应从第一个脚本传递到第二个脚本。(使用关键字DEFINE) 我的代码如下所示: @@C:\Users\pe.k\Documents\script2.sql &p_v_username set serveroutput on define p_v_username = "user"; 在第二个脚本中,应输出用户的所有表。(使用关键字executeimmediate和游标) 输出控制将通过脚本中的参数或在调

嗨,我有以下计划: 我想写一个脚本,它调用另一个脚本。参数V_USERNAME应从第一个脚本传递到第二个脚本。(使用关键字DEFINE)

我的代码如下所示:

@@C:\Users\pe.k\Documents\script2.sql &p_v_username

set serveroutput on

define p_v_username =  "user";
在第二个脚本中,应输出用户的所有表。(使用关键字executeimmediate和游标)

输出控制将通过脚本中的参数或在调用脚本时完成

示例调用: SQL>@start\u脚本1 MML

declare 
    &p_v_username  varchar2(100); 
    v_result    varchar2(100);
    cursor cp_username (&p_v_username varchar2) 
    is
        select owner, table_name           
        from all_tables
        where owner = &p_v_username  
        order by owner, table_name;       
begin 
     dbms_output.put_line('Alle Tabellen der User'); --l_username);
     open cp_username(&p_v_username);
     --loop
         --fetch cp_username into v_result;
        -- dbms_output.put_line(v_result);
    --end loop;
     close cp_username;
end;
/   

我犯了错误,我迷路了。我不知道怎么做你的第二个程序应该是这样的:

BEGIN
    DBMS_OUTPUT.PUT_LINE('Alle Tabellen der User'); --l_username);
    FOR TABS IN (
        SELECT OWNER, TABLE_NAME
        FROM ALL_TABLES
        WHERE OWNER = '&P_V_USERNAME'
        ORDER BY OWNER, TABLE_NAME
    ) LOOP
        DBMS_OUTPUT.PUT_LINE(TABS.TABLE_NAME);
    END LOOP;
END;
/

为了从PL/SQL打印DBMS_输出包生成的输出,请确保
将serveroutput设置为on

更改该“计划”如何?我的意思是,你要做的是以你能想到的最复杂的方式(一个脚本调用另一个脚本,传递这个和那个,通过游标循环…)显示某人有权访问的表的列表。光标中当前的SELECT语句有什么问题?您将以更少的努力获得相同(或更好)的结果。谢谢,但我想在select的这一部分使用游标,这就是为什么,我想列出所有具有所有者名称的表。对于循环查询游标,没有其他!!