在 Oracle 10g 中工作。列出所有表名的简单方法(从 dba_tables where owner = 'me' 中选择 table_name)但是现在我有了表名,是否有一种简单的方法可以遍历它们并按顺序对每个表进行“描述”?
问问题
1864 次
5 回答
2
您可以查询 DBA_TAB_COLUMNS(或 USER_TAB_COLUMNS)。
尼古拉斯。
于 2010-06-17T14:33:28.503 回答
1
使用用户登录,然后运行以下命令,第一个文件将包含描述命令,第二个文件将是包含登录用户所有表的所有描述的所需文件
spool desctables.sql select 'describe '||table_name||';' from user_tables; spool off spool alltables.txt @desctables.sql spool off
于 2013-12-16T18:50:37.840 回答
1
不确定您是否可以从 PL/SQL 中进行描述。我只是尝试使用execute immediate 'describe some_table'
,这也不起作用。您的下一个选择是查询 DBA_TAB_COLUMNS,或者使用您的所有描述语句创建一个新文件(使用 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!*/
于 2010-06-17T14:44:15.690 回答
1
您可以使用DBMS_METADATA.GET_DDL在 PL/SQL 中执行此操作,例如(来自文档的示例):
SET LONG 2000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;
于 2010-06-18T01:19:23.057 回答
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
于 2010-06-17T15:39:26.083 回答