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很可能会得到不同的结果,但是对于同一个查询,结果仍然是正确的。