在Oracle 10g中工作。列出所有表名的简便方法(从dba_tables中选择table_name,其中owner ='me') 但是现在我有了表名,是否有一种简单的方法可以循环遍历它们并按顺序对每一个进行“描述”?
答案 0 :(得分:2)
您可以查询DBA_TAB_COLUMNS(或USER_TAB_COLUMNS)。
尼古拉斯。
答案 1 :(得分:1)
不确定您是否可以在PL / SQL中进行描述。我刚刚尝试使用execute immediate 'describe some_table'
,但这也无效。您的下一个选择是查询DBA_TAB_COLUMNS,或使用所有describe语句创建一个新文件(使用pl / sql中的dbms_output和spool来创建文件),然后执行该文件。也许是这样的:
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!*/
答案 2 :(得分:1)
您可以使用DBMS_METADATA.GET_DDL在PL / SQL中执行此操作,例如: (来自文档的例子):
SET LONG 2000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;
答案 3 :(得分:1)
使用该用户登录,然后运行以下命令,第一个文件将包含describe命令,第二个文件将是包含登录用户所有表的所有描述的所需文件
spool desctables.sql
select 'describe '||table_name||';' from user_tables;
spool off
spool alltables.txt
@desctables.sql
spool off
答案 4 :(得分:0)
我建议查询dba_tab_columns,如N. Gasparotto建议的那样,但是如果你真的想要描述输出,那么用以下内容创建一个文件mulit-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