昨天幫助同事遇到乙個問題,有兩張excel表a和b,其中的字段是相同的,要做這樣的操作,用兩張表中的nsrsbh欄位進行關聯,將a表中的字段qrbz插入到b表中的相應位置,起初想到的是利用excel的自帶函式vlookup解決這個問題,但是在嘗試之後發現並不好用,達不到實際的效果,也許是本人的excel函式水平低端。
聽到這個需求,從一開始就有想用sql的想法,但是表的字段有二十多個,匯入過程比較麻煩,為了避開匯入,就又選擇了用office自帶的acess,access可以直接將excel作為資料表匯入,而且可以預設的將**的第一行檢索為欄位名,頓時欣喜若狂,但最後依然是失敗告終,acess最後只能做到將兩張表的內容合成一張表,既將a,b兩張表的qrbz取出來和在一張表上,但是是作為兩列存在。
最後還是選擇了將兩張表匯入plsql中,但是又發現了新的問題,一條update語句是無法完成的(用update是因為a表中的有些資料已經手工加到b表中了),就這樣用到了儲存過程去嘗試。
create or replace procedure chaxun
isnb varchar(20);
sql_query varchar(10000);
cursor nsrsbh is select select_331.aa as sbh from select_331,select_all where select_all.aa = select_331.aa;
tabname_row nsrsbh%rowtype;
begin
for tabname_row in nsrsbh
loop
nb:=tabname_row.sbh;
sql_query:='update select_all m set m.a=(select n.a from select_331 n where n.aa='''||nb||''') where m.aa='''||nb||'''' ;
execute immediate sql_query;
end loop;
commit;
end;
-----成功實現了需求.
這段儲存是參照以前寫過的乙個定時提取資料的儲存改的,在這裡很感謝趙哥傳來的備份,之前辛苦自學好不容易寫出來的幾句**也沒拷貝下來,現在想用又不會了,這也是我 決定以後堅持寫部落格的原因了,每次做完新東西以後隨手記下來,日後再用也就方便了。
這是第一次嘗試將excel表打入plsql進行操作,之前有過想法,但是沒有做過,以後會更多的去嘗試這種方法,雖然現在我也說不清原因,但總隱隱覺得會簡便很多繁雜的手工操作,excel的函式不如sql+oracle函式用起來靈活,而且oracle的函式是相當全面的。
今後我 會一直在部落格裡更新關於資料表的操作的一些便捷方法,因為工作需求,也搞不了多高大上的東西,最常做的莫過於資料和**的操作,手工的複製貼上確實是一種身體和心靈的折磨,且準確程度在眼睛看花的時候根本沒法保證。
利用儲存過程進行批量資料新增
下面這個儲存過程是實現將表t jxjh ydjxrws中滿足條件的資料新增到表t jxrws中 create procedure jxjh sczxjxrws xnxqbh varchar 5 zybh varchar 10 ccbh varchar 10 nj intas declare li b...
mysql利用儲存過程批量插入資料
最近需要測試一下mysql單錶資料達到1000w條以上時增刪改查的效能。由於沒有現成的資料,因此自己構造,本文只是例項,以及簡單的介紹。首先當然是建表 create table fortest id int 30 unsigned not null auto increment primary ke...
批量刪除儲存過程的儲存過程
create procedure dropprocedure as declare cur cursor read only for select name from sysobjects where xtype p and name like drop declare name varchar 4...