因為做項目的測試,所有需要不斷的在數據庫手工添加數據,這時(shí)候如果是批量的插入測試數據,很多情況下要用到存儲過(guò)程。
如下,是Oracle數據庫下一個(gè)簡(jiǎn)單的插入數據的存儲過(guò)程:
create or replace procedure insert_test1
is
begin
for i in 1..10 loop
insert into t_title(title_id,section_id,category_id,name,keyword,abbreviation,poster,starring,director,status,create_time)
values(seq_title.nextval,1,11,'河東獅吼','喜劇,動(dòng)作,臺慶,偶像,搞笑 ','HDSH',
'http://192.168.50.70:8038/poster/VODC2010011216181705.jpg','王晶','張柏芝,古天樂(lè ),陳冠希','A',sysdate);
end loop;
commit;
end;
它實(shí)現的功能很簡(jiǎn)單,就是往數據中插入10條數據;
如何執行這個(gè)存儲過(guò)程呢?
一般存儲過(guò)程的調用分兩種,一種是在代碼中調用,比如通過(guò)java中jdbc的prepareCall()方法調用;另一種是直接在SQL編輯器中執行,比如在PL\SQL下執行一個(gè)存儲過(guò)程;
因為我們是測試,所有毫無(wú)疑問(wèn)是在PL\SQL下執行這個(gè)存儲過(guò)程了;步驟如下:
1.新建存儲過(guò)程(就是執行上面的存儲過(guò)程代碼),在左側My Object下Procedures下可以看到我們新建的那個(gè)存儲過(guò)程的名稱(chēng);
2.新建一個(gè)命令窗口(注意:一定是命令窗口哦),輸入exec 存儲過(guò)程名,回車(chē);OK,執行成功?。ㄈ缦滤荆海?/span>
SQL> exec insert_test1;
PL/SQL procedure successfully completed
備注:
1.注意執行存儲過(guò)程是在命令窗口下;我一時(shí)大意在SQL窗口下執行了半天,沒(méi)有執行成功!
2.如果存儲過(guò)程有問(wèn)題,創(chuàng )建后會(huì )發(fā)現它的名字上有個(gè)小紅叉,該如何調試錯誤呢?
a.右鍵存儲過(guò)程名,“重新編譯參照對象”;
b.工作區一片空白,這時(shí)候發(fā)現它上面有兩個(gè)按鈕:一個(gè)是小齒輪模樣,它是編輯無(wú)效數據的,一個(gè)是返回的模樣,它是刷新對象列表的;先點(diǎn)擊右邊的按鈕刷新列表,這時(shí)候就出現了我們的存儲過(guò)程了;再點(diǎn)擊左側按鈕編輯無(wú)效數據,OK,下方就提示了你錯誤的信息;
其實(shí),在命令窗口下創(chuàng )建或執行存儲過(guò)程時(shí)候,都是很提示你的錯誤信息的。
==============================================================================
如果存儲過(guò)程帶有參數,僅僅是輸入參數,調用的時(shí)候只要exec XXX(參數) 就可以啦,如果是輸出參數呢?
首先定義輸出參數,然后在 exec(輸入參數,:輸出參數); 記得一定加冒號呀!
SQL> var c varchar2;
SQL> exec rpt_count_ctg_play('2011-03-16',:c);
PL/SQL procedure successfully completed