Имена таблиц и цикл для описания - PullRequest
2 голосов
/ 17 июня 2010

Работа в Oracle 10g. Простой способ составить список всех имен таблиц (выберите table_name из dba_tables, где owner = 'me') Но теперь, когда у меня есть имена таблиц, есть ли простой способ просмотреть их по очереди и сделать «описание» каждого из них по очереди?

Ответы [ 5 ]

2 голосов
/ 17 июня 2010

Вы можете запросить DBA_TAB_COLUMNS (или USER_TAB_COLUMNS).

Николас.

1 голос
/ 16 декабря 2013
  1. войдите в систему с пользователем и затем выполните следующие команды, первый файл будет содержать команды описания, а второй файл будет желаемым файлом, содержащим все описания всех таблиц для вошедшего в систему пользователя

    spool desctables.sql
    select 'describe '||table_name||';' from user_tables;
    spool off
    spool alltables.txt
    @desctables.sql
    spool off
    
1 голос
/ 18 июня 2010

Вы можете сделать это в PL / SQL, используя DBMS_METADATA.GET_DDL , например, (пример взят из документации):

SET LONG 2000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;
1 голос
/ 17 июня 2010

Не уверен, что вы можете сделать описание из PL / SQL. Я только что попытался использовать execute immediate 'describe some_table', это тоже не работает. Следующим выбором будет запрос DBA_TAB_COLUMNS или создание нового файла со всеми вашими операторами описания (используя dbms_output из pl / sql и 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!*/
0 голосов
/ 17 июня 2010

Я бы рекомендовал запросить dba_tab_columns, как предложил Н. Гаспаротто, но если вы действительно хотите описать вывод, то создайте файл mulit-description.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 runпо:

@multi-describe ME
...