Имена таблиц и цикл для описания
Работаю в Oracle 10g. Простой способ составить список всех имен таблиц (выберите table_name из dba_tables, где owner = 'me'). Но теперь, когда у меня есть имена таблиц, есть ли простой способ циклически просматривать их и делать "описания" для каждой из них по очереди?
5 ответов
Вы можете сделать запрос к DBA_TAB_COLUMNS (или USER_TAB_COLUMNS).
Николя.
войдите в систему с пользователем и затем выполните следующие команды, первый файл будет содержать команды описания, а второй файл будет желаемым файлом, содержащим все описания всех таблиц для вошедшего в систему пользователя.
spool desctables.sql select 'describe '||table_name||';' from user_tables; spool off spool alltables.txt @desctables.sql spool off
Не уверен, что вы можете сделать описание из 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!*/
Вы можете сделать это в PL/SQL, используя DBMS_METADATA.GET_DDL, например (пример взят из документации):
SET LONG 2000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT') FROM DUAL;
Я бы порекомендовал запросить 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 работают:
@multi-describe ME