2009-06-02 9 views
19

मेरे पास एक सारणी है जो ओरेकल डेटाबेस में मौजूद है, लेकिन टूल एसक्यूएल डेवलपर में टेबल की मेरी सूची में दिखाई नहीं देती है। हालांकि, अगर मैं एसक्यूएल * प्लस पर जाता हूं, औरएसक्यूएल * ओएसकल में तालिका विवरण कथन कैसे प्राप्त करें * प्लस

select table_name from user_tables; 

मुझे तालिका सूचीबद्ध है। अगर मैं

desc snp_clearinghouse; 

टाइप यह मेरे क्षेत्रों को दर्शाता है। मैं निर्माण कथन प्राप्त करना चाहता हूं, क्योंकि मुझे एक फ़ील्ड जोड़ने की आवश्यकता है। मैं फ़ील्ड जोड़ने के लिए तालिका को संशोधित कर सकता हूं, लेकिन मुझे अभी भी हमारे स्रोत नियंत्रण में डालने के लिए निर्माण कथन की आवश्यकता है। तालिका के लिए निर्माण विवरण प्राप्त करने के लिए क्या pl/sql कथन का उपयोग किया जाता है?

+0

cletus के जवाब में मदद मिलेगी आप DDL आप चाहते हैं मिलता है, लेकिन SQL डेवलपर के संबंध में तालिका दिखाई नहीं दे रहा (मुझे लगता है कि आप ओरेकल एसक्यूएल डेवलपर का जिक्र कर रहे हैं), क्या आप टेबल के मालिक के रूप में लॉग इन कर रहे हैं? यदि आप SQL डेवलपर में user_tables से SELECT table_name टाइप करते हैं तो क्या होता है? –

+0

यह उस सहित सभी तालिकाओं को दिखाता है। मेरे पास इस डेटाबेस में 84 टेबल हैं, जब मैं user_tables से एक select table_name करता हूं, और तालिकाओं की सूची में केवल 83 शो करता हूं। यह एक रिलेशनल डेटाबेस है, लेकिन यह एक हीरायरैचिकल डेटाबेस की एक प्रति है, और यह हर दिन पुन: उत्पन्न हो जाता है। मुझे लगता है कि एसक्यूएल डेवलपर खो जाता है, या कभी-कभी काफी नहीं रह सकता है। – thursdaysgeek

उत्तर

27
Get table and index DDL the easy way से

:

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; 
5

ऊपर, लेकिन सामान्य स्क्रिप्ट मिली 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; 
/
+0

लिपि के लिए धन्यवाद, यह बहुत अच्छा काम करता है और मुझे वही करता है जो मुझे चाहिए! – DaveN59

+0

बहुत अच्छी तरह से काम किया। धन्यवाद। – KateYoak

+0

क्यों डीबीएमएस_एमटीएडीएटीएए को फिर से बनाएं? –

संबंधित मुद्दे