Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 显示由用户PL SQL过程创建的所有表_Database_Oracle_Plsql - Fatal编程技术网

Database 显示由用户PL SQL过程创建的所有表

Database 显示由用户PL SQL过程创建的所有表,database,oracle,plsql,Database,Oracle,Plsql,我正在尝试创建一个过程来显示指定用户创建的所有表。以下是我到目前为止的情况: CREATE OR REPLACE PROCEDURE user_tables @username VARCHAR(50), @result varchar(100000) OUTPUT AS BEGIN -- Execution section Set result = SELECT * FROM ALL_TABLES WHERE OWNER = @username; EXCEPTION

我正在尝试创建一个过程来显示指定用户创建的所有表。以下是我到目前为止的情况:

CREATE OR REPLACE PROCEDURE user_tables
@username VARCHAR(50),
@result  varchar(100000)  OUTPUT
AS
BEGIN    
   -- Execution section 
   Set result = SELECT * FROM ALL_TABLES WHERE OWNER = @username;


EXCEPTION    
  -- Exception section 
     WHEN no_data_found THEN 
      dbms_output.put_line('User does not exist'); 
   WHEN others THEN 
      dbms_output.put_line('Error!'); 


END; 
我想知道这是否是正确的路径,以及我应该如何完成这项任务

BEGIN
    FOR tn IN (SELECT table_name FROM all_tables /*WHERE owner = vc_User_Name*/)
    LOOP
        -- Display some stuff
        DBMS_OUTPUT.PUT_LINE(tn.table_name);
    END LOOP;
END;
/

“@”和“Set”是SQL Server语法,而不是Oracle;所以不,这条路不对。找不到数据可能是由于以下几个原因造成的,不仅仅是用户名不正确。我建议使用带有光标的FOR循环,并在循环中逐行显示用户内容。“创建的所有表”是否仍然存在?这不会显示用户在三个月前创建并在上周删除的表;你在乎吗?如果没有,则只查找当前由
USER
拥有的表。我相信它们指的是指定的用户,而不仅仅是用户。如果是这样的话,他们可以使用用户表而不是所有的表。当然,所有的_表都只给您有权查看的表。如果需要的是特定用户拥有的所有表名,那么需要的是DBA_表视图。ALL_TABLES实际上是一个误称,表示当前用户可以访问的所有表。对于所有的_表,user1和user2很可能会得到不同的结果,但是对于同一个查询,结果仍然是正确的。