2015-09-10 43 views
0

有人可以通過查詢獲取包含Oracle 7數據的創建表腳本嗎?由於這是Oracle 7,並且在一個非常老的Linux機器上,我不認爲蟾蜍會工作。我必須使用putty連接到服務器,然後從中啓動sqlplus。一切都是膩子窗口。請幫忙。感謝生成包含Oracle 7數據的表格腳本

+0

你要問什麼樣的數據字典視圖使用?或如何編寫腳本?或者你只是想讓別人爲你做? – Randy

回答

0

如何:

create table test(id number, data varchar2(100)); 
insert into test values (1, 'This isn''t the data you''re looking for'); 

應該在Oracle 7環境下運行,但它是未經檢驗的,因爲我還沒有在十年或更長時間訪問Oracle 7環境。

要找出當前存在的表的結構,您可以使用SQL * Plus describe命令。例如:

SQL> desc dual 

Name Null Type   
----- ---- ----------- 
DUMMY  VARCHAR2(1) 

哪個應該給你足夠的信息來在另一個環境中重新創建表本身。此外,您可以查詢[ALL | USER] _CONSTRAINTS,[ALL | USER] _CONS_COLUMNS,[ALL | USER] _INDEXES和[ALL | USER] _TRIGGERS以確定任何其他相關信息(假設這些視圖存在後兩個可能不存在)。

最後,您可以構建一個查詢或進程,提取數據並將其後臺處理或使用UTL_FILE將其以適合插入的格式寫入文件。

+0

我有一個表已經存在於數據庫中,但現在我想將它移動到MS SQL。但作爲一個非常舊的Linux機器上運行的Oracle 7,我不能使用蟾蜍或SQL開發人員點擊它並說出口。我只是想知道是否有一種方法可以將一個腳本的所有數據都轉換爲一個文件,這樣我就可以將它導入到sql server中。就像當你右鍵點擊一張桌子並且用數據生成腳本一樣。 – user3731575

0

我有一個腳本年前寫的,它應該在Oracle 7.它不是一個簡單的查詢,它創建了一個包和一個工作表中,但它可以幫助

set feedback on 
set verify off 
prompt Vytvářím pomocné objekty... 
create table XDummy(object_name Varchar2(30), 
object_type Varchar2(13),rownm number(3),text varchar2(2000)); 

create or replace package SPINKYHO_OBJEKTY is 
    procedure P_Indexes(PIndexName in Varchar2,Dummy in Varchar2); 
    procedure P_Sequences(PSequenceName in Varchar2,Dummy in Varchar2); 
    procedure P_Sources(SrcName in Varchar2,SrcType in Varchar2); 
    procedure P_Tables(PTableName in Varchar2,Dummy in Varchar2); 
    procedure P_Views(PViewName in Varchar2,Dummy in Varchar2); 
    procedure P_Triggers(PTriggerName in Varchar2,Dummy in Varchar2); 
end SPINKYHO_OBJEKTY; 
/

create or replace package body SPINKYHO_OBJEKTY is 
procedure Constraints(PTableName in Varchar2) is 
    cursor c_constraint is 
    select constraint_name, 
     decode(constraint_type,'C','CHECK','P','PRIMARY KEY', 
     'R','FOREIGN KEY','U','UNIQUE'),search_condition, 
     r_owner,r_constraint_name 
     from all_constraints 
     where table_name = PTableName and 
      constraint_name not like 'SYS%' and 
      owner = upper('&1'); 
    cursor c_columns(POwner Varchar2,PConstraint Varchar2) is 
    select table_name,column_name from all_cons_columns 
     where owner = upper(POwner) and 
      constraint_name = PConstraint; 
    PConstr Varchar2(30); 
    PTyp  Varchar2(11); 
    PCond  Varchar2(2000); 
    PRConstr Varchar2(30); 
    PROwn  Varchar2(30); 
    PText  Varchar2(2000); 
begin 
    open c_constraint; 
    fetch c_constraint into PConstr,PTyp,PCond,PROwn,PRConstr; 
    while c_constraint%FOUND loop 
    insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',1,'alter table '||PTableName||' add (constraint "'|| 
      PConstr||'" '||PTyp||' ('); 
    if PTyp = 'CHECK' then 
     insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',2,PCond); 
     insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',3,'));'); 
    elsif PTyp in ('PRIMARY KEY','UNIQUE') then 
     for r in c_columns('&1',PConstr) loop 
     if c_columns%ROWCOUNT = 1 then 
      PText := r.column_name; 
     else 
      PText := PText||','||r.column_name; 
     end if; 
     end loop; 
     PText := PText||'));'; 
     insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',2,PText); 
    elsif PTyp = 'FOREIGN KEY' then 
     for r in c_columns('&1',PConstr) loop 
     if c_columns%ROWCOUNT = 1 then 
      PText := r.column_name; 
     else 
      PText := PText||','||r.column_name; 
     end if; 
     end loop; 
     PText := PText||')'; 
     insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',2,PText); 
     for r in c_columns(PROwn,PRConstr) loop 
     if c_columns%ROWCOUNT = 1 then 
      PText := ' REFERENCES '||r.table_name||'('||r.column_name; 
     else 
      PText := PText||','||r.column_name; 
     end if; 
     end loop; 
     PText := PText||'));'; 
     insert into xdummy(object_name,object_type,rownm,text) 
     values(PConstr,'CONSTRAINT',3,PText); 
    end if; 
    fetch c_constraint into PConstr,PTyp,PCond,PROwn,PRConstr; 
    end loop; 
    close c_constraint; 
end Constraints; 
-- 
procedure P_Indexes(PIndexName in Varchar2,Dummy in Varchar2) is 
    cursor c_columns is 
    select table_name,column_name 
     from all_ind_columns 
    where index_name = PIndexName and 
      index_owner = upper('&1') 
    order by column_position; 
    cursor c_unique is 
    select uniqueness from all_indexes 
     where index_name = PIndexName and 
      owner = upper('&1'); 
    PTable  Varchar2(30); 
    PColumn  Varchar2(30); 
    PText  Varchar2(1000); 
    PRownm  Number; 
    PUniqueness Varchar2(20); 
begin 
    open c_unique; 
    fetch c_unique into PUniqueness; 
    close c_unique; 
    open c_columns; 
    fetch c_columns into PTable,PColumn; 
    PRownm := 1; 
    while c_columns%FOUND loop 
    if PRownm = 1 then 
     if PUniqueness = 'UNIQUE' then 
     PText := 'create unique index '||PIndexName||' on '||PTable||' ('||PColumn; 
     else 
     PText := 'create index '||PIndexName||' on '||PTable||' ('||PColumn; 
     end if; 
    else 
     PText := ','||PColumn; 
    end if; 
    insert into XDummy(object_name,object_type,rownm,text) 
     values(PIndexName,'INDEX',PRownm,PText); 
    fetch c_columns into PTable,PColumn; 
    PRownm := PRownm + 1; 
    end loop; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PIndexName,'INDEX',PRownm+1,')'||chr(10)||';'||chr(10)); 
    close c_columns; 
    commit; 
end P_Indexes; 
-- 
procedure P_Sequences(PSequenceName in Varchar2,Dummy in Varchar2) is 
begin 
    insert into xdummy(object_name,object_type,rownm,text) 
    select PSequenceName,'SEQUENCE',1, 
      'create sequence '||PSEquenceName||chr(10)||'start with '||to_char(last_number)|| 
      chr(10)||'increment by '||to_char(increment_by)||';'||chr(10) 
     from all_sequences 
     where sequence_name = PSequenceName and 
      sequence_owner = upper('&1'); 
    commit; 
end P_Sequences; 
-- 
procedure P_Sources(SrcName in Varchar2,SrcType in Varchar2) is 
    cursor c_text is 
    select text from all_source 
     where name = SrcName and 
      type = SrcType and 
      owner = upper('&1') 
     order by line; 
    PText  Varchar2(1000); 
    PRownm  Number; 
begin 
    for r_text in c_text loop 
    if c_text%ROWCOUNT = 1 then 
     PText := 'create '||r_text.text; 
    else 
     PText := r_text.text; 
    end if; 
    PRownm := c_text%ROWCOUNT; 
    insert into XDummy(object_name,object_type,rownm,text) 
     values(SrcName,SrcType,PRownm,PText); 
    end loop; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(SrcName,SrcType,PRownm+1,'/'||chr(10)); 
    commit; 
end P_Sources; 
-- 
procedure P_Tables(PTableName in Varchar2,Dummy in Varchar2) is 
    cursor c_columns is 
    select column_name,data_type,data_length,data_precision,data_scale, 
     nullable,default_length,data_default 
     from all_tab_columns 
    where table_name = PTableName and 
      owner = upper('&1'); 
    PColumn  Varchar2(30); 
    PDataType Varchar2(9); 
    PDataLength Number; 
    PDataPrec Number; 
    PDataScale Number; 
    PNull  Varchar2(1); 
    PDefLength Number; 
    PDefault  Varchar2(2000); 
    PText  Varchar2(1000); 
    PRownm  Number; 
begin 
    open c_columns; 
    fetch c_columns into PColumn,PDataType,PDataLength,PDataPrec,PDataScale, 
       PNull,PDefLength,PDefault; 
    PRownm := 1; 
    while c_columns%FOUND loop 
    if PRownm = 1 then 
     PText := 'create table '||PTableName||chr(10)||'('||chr(10)||PColumn; 
    else 
     PText := ','||PColumn; 
    end if; 
    PText := PText||' '||lower(PDataType); 
    if PDataType in ('VARCHAR2','CHAR','NUMBER') then 
     if PDataPrec is not null then 
     PText := PText||'('||PDataPrec; 
     if nvl(PDataScale,0) <> 0 then 
      PText := PText||','||PDataScale||')'; 
     else 
      PText := PText||')'; 
     end if; 
     else 
     if PDataLength > 0 then 
      PText := PText||'('||PDataLength||')'; 
     end if; 
     end if; 
    end if; 
    if PDefault is not null then 
     PText := PText||' DEFAULT '||substr(PDefault,1,PDefLength); 
    end if; 
    if PNull = 'Y' then 
     PText := PText||' NULL'; 
    else 
     PText := PText||' NOT NULL'; 
    end if; 
    insert into XDummy(object_name,object_type,rownm,text) 
     values(PTableName,'TABLE',PRownm,PText); 
    fetch c_columns into PColumn,PDataType,PDataLength,PDataPrec,PDataScale, 
       PNull,PDefLength,PDefault; 
    PRownm := PRownm + 1; 
    end loop; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PTableName,'TABLE',PRownm+1,')'||chr(10)||';'||chr(10)); 
    close c_columns; 
    Constraints(PTableName); 
    commit; 
end P_Tables; 
-- 
procedure P_Views(PViewName in Varchar2,Dummy in Varchar2) is 
    cursor c_columns is 
    select column_name 
     from all_tab_columns 
    where table_name = PViewName and 
      owner = upper('&1') 
    order by column_id; 
    cursor c_view is 
    select text from all_views 
     where view_name = PViewName and 
      owner = upper('&1'); 
    PColumn  Varchar2(30); 
    PText  Varchar2(5000); 
    PRownm  Number; 
begin 
    open c_columns; 
    fetch c_columns into PColumn; 
    PRownm := 1; 
    while c_columns%FOUND loop 
    if PRownm = 1 then 
     PText := 'create view '||PViewName||chr(10)||'('||chr(10)||PColumn; 
    else 
     PText := ','||PColumn; 
    end if; 
    insert into XDummy(object_name,object_type,rownm,text) 
     values(PViewName,'VIEW',PRownm,PText); 
    fetch c_columns into PColumn; 
    PRownm := PRownm + 1; 
    end loop; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PViewName,'VIEW',PRownm+1,')'||chr(10)||'AS'); 
    close c_columns; 
    open c_view; 
    fetch c_view into PText; 
    close c_view; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PViewName,'VIEW',PRownm+1,PText||chr(10)||';'||chr(10)); 
    commit; 
end P_Views; 
-- 
procedure P_Triggers(PTriggerName in Varchar2,Dummy in Varchar2) is 
    cursor c_triggers is 
    select description,trigger_body 
     from all_triggers 
    where trigger_name = PTriggerName and 
      owner = upper('&1'); 
    PDescr  Varchar2(2000); 
    PBody  Varchar2(32000); 
    PRownm  Number := 2; 
    PText  Varchar2(2000); 
begin 
    open c_triggers; 
    fetch c_triggers into PDescr,PBody; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PTriggerName,'TRIGGER',1,'create trigger '||PDescr); 
    while instr(PBody,chr(10)) > 0 loop 
    PText := substr(PBody,1,instr(PBody,chr(10))); 
    insert into XDummy(object_name,object_type,rownm,text) 
     values(PTriggerName,'TRIGGER',PRownm,PText); 
    PBody := substr(PBody,instr(PBody,chr(10))+1); 
    PRownm := PRownm + 1; 
    end loop; 
    insert into XDummy(object_name,object_type,rownm,text) 
    values(PTriggerName,'TRIGGER',PRownm+1,PBody||'/'||chr(10)); 
    close c_triggers; 
end P_Triggers; 
end SPINKYHO_OBJEKTY; 
/

set echo off 
set termout off 
set feedback off 
set heading off 

prompt Sestavuji seznam dB objektů... 
spool main.sql 
select 'prompt '||object_type||' '||object_name||'...'||chr(10)|| 
     'execute spinkyho_objekty.'||decode(object_type,'TABLE','P_Tables', 
     'VIEW','P_Views','SEQUENCE','P_Sequences','INDEX','P_Indexes', 
     'TRIGGER','P_Triggers','P_Sources')|| 
     ' ('''||object_name||''','''||object_type||''');' 
    from /*all_objects*/ sys.dba_objects 
    where object_name != 'XDUMMY' and 
     object_name != 'SPINKYHO_OBJEKTY' and 
     object_name like upper('&2') and 
     owner like upper('&1') 
    order by decode(object_type,'TABLE',1,'INDEX',2,'SEQUENCE',3, 
      'VIEW',4,'TRIGGER','5','6'); 
spool off; 

set termout on 
@main.sql 

prompt Vytvarim vysledny soubor... 
set termout off 
set recsep off 
set pages 999 
spool dict.sql 
select text from xdummy 
    order by decode(object_type,'TABLE',1,'INDEX',2,'SEQUENCE',3, 
      'VIEW',4,'TRIGGER','5','6'),object_name,rownm; 
spool off; 

set termout on 
set recsep wrapped 
set verify on 
set heading on 
set feedback on 
set pages 60 

prompt Ruším pomocné objekty... 
drop table XDummy; 
drop package spinkyho_objekty; 

如果您需要導出數據,使用

set feedback off 
rem set trimspool on /* 8.1 feature */ 
set lines 10000 
set pages 9999 /* set pages 0 works since Oracle 8 */ 
spool data.sql 

select 'insert into your_table(column1, ...) values ('''||column1||''','''...''');)' 
    from your table; 

spool off 
+0

設置trimspool,行,假脫機對oracle 7不起作用我一直收到未知的命令.... – user3731575

+0

是的,你說得對。我評論一下。該命令修剪文件輸出的尾部空格,這不是必需的。 –

相關問題