2010-06-17 74 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