primary - describe table oracle pl/sql developer
Cómo obtener Oracle create table statement en SQL*Plus (2)
Desde Obtener tabla e indexar DDL de la manera más fácil :
set heading off;
set echo off;
Set pages 999;
set long 90000;
spool ddl_list.sql
select dbms_metadata.get_ddl(''TABLE'',''DEPT'',''SCOTT'') from dual;
select dbms_metadata.get_ddl(''INDEX'',''DEPT_IDX'',''SCOTT'') from dual;
spool off;
Tengo una tabla que existe en una base de datos Oracle, pero no aparece en mi lista de tablas en la herramienta SQL Developer. Sin embargo, si voy a SQL * Plus, y hago un
select table_name from user_tables;
Obtengo la tabla en la lista. Si escribo
desc snp_clearinghouse;
me muestra los campos. Me gustaría obtener la declaración de creación, porque necesito agregar un campo. Puedo modificar la tabla para agregar el campo, pero aún necesito la declaración de creación para ponerla en nuestro control de fuente. ¿Qué instrucción pl / sql se usa para obtener la instrucción create para una tabla?
Igual que el anterior, pero el script genérico se encuentra aquí gen_create_table_script.sql
-- #############################################################################################
--
-- %Purpose: Generate ''CREATE TABLE'' Script for an existing Table in the database
--
-- Use: SYSTEM, SYS or user having SELECT ANY TABLE system privilege
--
-- #############################################################################################
--
set serveroutput on size 200000
set echo off
set feedback off
set verify off
set showmode off
--
ACCEPT l_user CHAR PROMPT ''Username: ''
ACCEPT l_table CHAR PROMPT ''Tablename: ''
--
DECLARE
CURSOR TabCur IS
SELECT table_name,owner,tablespace_name,
initial_extent,next_extent,
pct_used,pct_free,pct_increase,degree
FROM sys.dba_tables
WHERE owner=upper(''&&l_user'')
AND table_name=UPPER(''&&l_table'');
--
CURSOR ColCur(TableName varchar2) IS
SELECT column_name col1,
DECODE (data_type,
''LONG'', ''LONG '',
''LONG RAW'', ''LONG RAW '',
''RAW'', ''RAW '',
''DATE'', ''DATE '',
''CHAR'', ''CHAR'' || ''('' || data_length || '') '',
''VARCHAR2'', ''VARCHAR2'' || ''('' || data_length || '') '',
''NUMBER'', ''NUMBER'' ||
DECODE (NVL(data_precision,0),0, '' '','' ('' || data_precision ||
DECODE (NVL(data_scale, 0),0, '') '','','' || DATA_SCALE || '') ''))) ||
DECODE (NULLABLE,''N'', ''NOT NULL'','' '') col2
FROM sys.dba_tab_columns
WHERE table_name=TableName
AND owner=UPPER(''&&l_user'')
ORDER BY column_id;
--
ColCount NUMBER(5);
MaxCol NUMBER(5);
FillSpace NUMBER(5);
ColLen NUMBER(5);
--
BEGIN
MaxCol:=0;
--
FOR TabRec in TabCur LOOP
SELECT MAX(column_id) INTO MaxCol FROM sys.dba_tab_columns
WHERE table_name=TabRec.table_name
AND owner=TabRec.owner;
--
dbms_output.put_line(''CREATE TABLE ''||TabRec.table_name);
dbms_output.put_line(''( '');
--
ColCount:=0;
FOR ColRec in ColCur(TabRec.table_name) LOOP
ColLen:=length(ColRec.col1);
FillSpace:=40 - ColLen;
dbms_output.put(ColRec.col1);
--
FOR i in 1..FillSpace LOOP
dbms_output.put('' '');
END LOOP;
--
dbms_output.put(ColRec.col2);
ColCount:=ColCount+1;
--
IF (ColCount < MaxCol) THEN
dbms_output.put_line('','');
ELSE
dbms_output.put_line('')'');
END IF;
END LOOP;
--
dbms_output.put_line(''TABLESPACE ''||TabRec.tablespace_name);
dbms_output.put_line(''PCTFREE ''||TabRec.pct_free);
dbms_output.put_line(''PCTUSED ''||TabRec.pct_used);
dbms_output.put_line(''STORAGE ( '');
dbms_output.put_line('' INITIAL ''||TabRec.initial_extent);
dbms_output.put_line('' NEXT ''||TabRec.next_extent);
dbms_output.put_line('' PCTINCREASE ''||TabRec.pct_increase);
dbms_output.put_line('' )'');
dbms_output.put_line(''PARALLEL ''||TabRec.degree);
dbms_output.put_line(''/'');
END LOOP;
END;
/