2010-06-17 75 views
2

在Oracle 10g中工作。简单的方法来列出所有的表名(从dba_tables中选择table_name,其中owner ='me') 但是现在我有了表名,是否有一种简单的方法可以循环遍历它们并按顺序对每个表进行“描述”?表名和循环描述

+0

更容易做到 “选择USER_TABLES TABLE_NAME;”而不是用where子句查询dba_tables。 – MJB 2010-06-17 14:35:11

+0

可能重复的[用oracle(.Net连接器)描述查询](http://stackoverflow.com/questions/867731/describe-query-with-oracle-net-connector) – DCookie 2010-06-17 15:04:36

回答

2

您可以针对DBA_TAB_COLUMNS(或USER_TAB_COLUMNS)进行查询。

Nicolas。

+0

并确保对它们进行适当的排序(on COLUMN_ID),否则这些列看起来不像您期望的那样。 – MJB 2010-06-17 14:37:15

1

不确定你可以在PL/SQL中做一个描述。我刚刚尝试使用execute immediate 'describe some_table',这也不起作用。您的下一个选择是查询DBA_TAB_COLUMNS,或使用所有描述语句(使用来自pl/sql和spool的dbms_output创建文件)创建一个新文件,然后执行该文件。也许是这样的:

spool temp_file.sql 
BEGIN 
    /*or you could have a loop here with as many put_lines as you need, it will all end up in the new script file.*/ 
    dbms_output.put_line('describe some_table'); 
END; 
/
spool off 
@temp_file.sql 
/*I have not actually tried running this code, beware syntax errors!*/ 
+0

你不能从PL/SQL做到 - 你是对的。这是因为“描述”,比如“set”,“copy”和其他一些命令,实际上是一个SQLPlus命令,而不是SQL语句。所以在这个环境之外,你不能执行它。你可以告诉,因为它不需要执行终端分号。 SQL语句(无论它们是DML还是DDL)都需要分号或一些终止字符,而不是[Enter]发送到数据库。 – MJB 2010-06-17 15:18:20

0

我建议你查询DBA_TAB_COLUMNS,如N. Gasparotto建议,但如果你真的想描述的输出,然后创建一个文件多功能使用,describe.sql下列要求:

set pagesize 0 
set termout off 
set feedback off 
set verify off 

spool mdtmp.sql 
select 'describe ' || owner || '.' || table_name 
from dba_tables 
where OWNER = upper('&1') 
/

spool off 
set termout on 
@mdtmp.sql 

在SQL * PLUS的运行:

@multi-describe ME 
+0

不错,这是正确的答案 – 2010-06-17 22:23:51

1

可以在PL/SQL中使用DBMS_METADATA.GET_DDL做到这一点,例如, (从文档所采取的示例):

SET LONG 2000000 
SET PAGESIZE 0 
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL; 
1
  1. 登录与用户和然后运行下面的命令,第一个文件将包含描述的命令和所述第二文件是一个包含所有的所有描述的所需的文件用于记录表中用户

    spool desctables.sql 
    select 'describe '||table_name||';' from user_tables; 
    spool off 
    spool alltables.txt 
    @desctables.sql 
    spool off 
    
+0

这对我来说很好,我确实遇到了一些问题,首先命令行太长了(我有500个表),所以我把它分成了100个批次,接下来我必须删除在顶部和底部的“命令>”,最后我不得不删除包装每个描述语句的“< " and " >”(我可能应该关掉它)。谢谢! – JGlass 2017-09-28 22:34:24