oracle批量插入測試數據的方法

oracle怎樣批量插入測試數據
        壹、Test Windos方式

  declare

  maxrecords constant int:=100000;

  i int :=1;

  begin

  for i in 1..maxrecords loop

  insert into test2

  (id, name)

  values

  (test2_seq.nextval, to_char(9999+i));

  end loop;

  dbms_output.put_line(’ 成功錄入數據!’);

  commit;

  end;

  二、從已有表中往入另壹張表導數據

  create or replace procedure TestProc is

  begin

  for c in(select id, name from test2) loop

  insert into test

  (id,

  name)

  values

  (test_seq.nextval, c.name);

  end loop;

  end TestProc;

如何刪除數據庫中重復沒用數據

在對數據庫進行操作過程中我們可能會碰到這種情況,表中的數據可能重復出現,使我們對數據庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重復沒有用的數據呢?重復數據刪除技術可以提供更大的備份容量,實現更長時間的數據保留,還能實現備份數據的持續驗證,Oracle 10G DBA進步數據恢復服務水平,方便實現數據容災等。重復的數據可能有這洋兩種情況,第壹種時表中只有某些字段壹洋,第二種是兩行記錄完全壹洋。Oracle數據庫重復數據刪除技術有如下優勢:更大的備份容量、數據能得到持續驗證、有更高的數據恢復服務水平、方便實現備份數據的容災。

壹、刪除部分字段重復數據

先來談談如何查詢重復的數據吧。
下面語句可以查詢出那些數據是重復的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
將上面的>號改為=號就可以查詢出沒有重復的數據了。
想要刪除這些重復的數據,可以使用下面語句進行刪除
delete from 表名 a where 字段1,字段2 in

(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

上面的語句非常間單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將數據庫吊死。所以我建議先將查詢到的重復的數據插入到壹個暫時表中,然後對進行刪除,這洋,執行刪除的時候就不用再進行壹次查詢了。如下:

create TABLE 暫時表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

上面這句話就是建立了暫時表,並將查詢到的數據插入其中。

下面就可以進行這洋的刪除操作了:

delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 暫時表);
這種先建暫時表再進行刪除的操作要比直接用壹條語句進行刪除要高效得多。
這個時候,大家可能會跳出來說,什麼?妳叫我們執行這種語句,那不是把所有重復的全都刪除嗎?而我們想保留重復數據中最新的壹條記錄啊!大家不要急,下面我就講壹下如何進行這種操作。

在oracle中,有個隱藏了自動rowid,裏面給每條記錄壹個唯壹的rowid,我們假如想保留最新的壹條記錄,
我們就可以利用這個字段,保留重復數據中rowid最大的壹條記錄就可以了。
下面是查詢重復數據的壹個例子:
以下是引用片段:
selecta.rowid,a.*from表名a 
  wherea.rowid!= 
  ( 
  selectmax(b.rowid)from表名b 
  wherea.字段1=b.字段1and 
  a.字段2=b.字段2 
  )

二、完全刪除重復記錄
對於表中兩行記錄完全壹樣的情況,可以用下面語句獲取到去掉重復數據後的記錄:
select distinct * from 表名
可以將查詢的記錄放到暫時表中,然後再將原來的表記錄刪除,最初將暫時表的數據導回原來的表中。如下:
createTABLE暫時表AS(selectdistinct*from表名);
truncatetable正式表;–註:原先由於筆誤寫成了droptable正式表;,現在已經改正過來
insertinto正式表(select*from暫時表);
droptable暫時表;

假如想刪除壹個表的重復數據,可以先建壹個暫時表,將去掉重復數據後的數據導入到暫時表,然後在從暫時表將數據導入正式表中,如下:
insertINTOt_table_bak 
selectdistinct*fromt_table;

三、怎樣快速刪除oracle數據庫
最快的方法就進入註冊表 在運行..裏輸入regedit.
依次展開HKEY_LOCAL_MACHINE SOFTWARE
找到ORACLE節點。刪除。
然後刪除ORACLE數據文件,安裝的時候選的路徑。
最初刪除oracle引導文件,在系統盤符的Program Files 裏面刪除oracle文件夾。

Oracle 數據庫技術

外部表是指不在數據庫中的表,如操作系統上的壹個按壹定格式分割的文本文件或者其他類型的表。這個外部表對於Oracle數據庫來說,就好像是壹張視圖,在數據庫中可以像試圖壹樣進行查詢等操作。這個試圖允許用戶在外部數據上運行任何的SQL語句,而不需要先將外部表中的數據裝載進數據庫中。不過需要註意是,外部數據表都是只讀的,不能夠更改。不過在使用外部表時仍然有不少的限制。

限制:需要先建立目錄對象。
在使用外部數據表的時候,需要先建立目錄對象。也就是說,要想Oracle數據庫系統(在Oracle中實現控制文件多路復用)訪問操作系統文件,就必須在數據庫中建立指向這個操作系統文件的目錄對象,然後通過這個目錄對象訪問相應的操作系統文件,即用目錄對象存儲操作文件的保存位置。不過需要註意,這個目錄對象普通用戶是無權創建的。壹般情況下只有特權用戶或者數據庫管理員角色才可以創建目錄對象。如果允許其他用戶也可以創建目錄對象的話,就需要授權給其他用戶。

其實這個目錄對象就是操作系統中文件或者表格的存儲位置。不過在建立對象的時候,需要小心,Oracle數據庫系統不會去確認這個目錄是否真的存在。如果在輸入這個目錄對象的時候,不小心把路徑寫錯了,那可能這個外部表仍然可以正常建立,但是卻無法查詢到數據。由於建立目錄對象時,缺乏這種自我檢查的機制,為此在將路徑賦予給這個目錄對象時,需要特別的註意。另外需要註意的是路徑的大小寫。在Windows操作系統中,其路徑是不區分大小寫的。而在Linux操作系統,這個路徑需要區分大小寫。故在不同的操作系統中,建立目錄對象時需要註意這個大小寫的差異。最好數據庫管理員可以養成壹個習慣,無論在什麽操作系統中,都采用小寫的目錄名與文件名。那麽在不同的操作系統中,就不用受到這個大小寫的困擾了。最後需要註意的是,目錄對象名必須唯壹。如果目錄對象名字有重復的話,系統會提示錯誤信息:“名稱已有現有對象引用”,而不會自動覆蓋原有的對象名設置。

雖然這個對象名設置比較簡單,但是其是數據庫尋找操作系統上文件的唯壹途徑。所以這個目錄對象的創建必須確保準確。否則的話,外部表就可能無法正常使用。