初學數據庫,相信大家跟我這個菜鳥一樣,對“存儲過程”這種此物只應天上有的東西,應該是有點望洋興嘆、望而生畏了,不過大家別怕,俗話說的好,不怕你不會,就怕就不學,讓咱們一起學習一下吧!
因爲工作中涉及到了參數模式的存儲過程,所以就說這一塊吧,不過我到現在也沒搞明白,帶參和不帶參有啥具體區別,還望大家相互幫助,可以留言討論。
首先創建一個需要傳入表名的存儲過程,代碼如下
create or replace procedure table_test(table_name in varchar2)
is
str_test varchar2(10000);
begin
str_test := 'insert into '||table_name||'(key_id) values(1)';
dbms_output.put_line(str_test);
execute immediate str_test;
end;
其中table_name爲傳入的表名
剛開始的時候是這麼寫的
create or replace procedure table_test(table_name in varchar2)
is
--str_test varchar2(10000);
begin
--str_test := 'insert into '||table_name||'(key_id) values(1)';
--dbms_output.put_line(str_test);
--execute immediate str_test;
select * from table_name;
end;
這樣寫就會報錯了,目測是存儲過程不直接識別sql語句,需調用execute 函數執行纔可以。
正確的就是第一次寫的代碼了
所以,創建存儲過程,簡單來說有這麼幾步,和我一樣的菜鳥朋友們可以這麼來做
一、創建存儲過程
1.創建一個存儲過程
create or replace procedure table_test(table_name in varchar2)(不要加分號)
過程名爲table_test,參數名爲table_name,類型爲varchar2,in關鍵字不要忘了。
2.聲明變量
is (不要加分號)
str_test varchar2(10000);(記得加分號)
變量名爲str_test, 類型爲varchar2,長度爲10000;
注:不同於c中變量的聲明,此處需要先寫變量名,再寫類型,c中是先寫類型,再寫變量名。
3.代碼執行區
begin(沒有分號)
str_test := 'insert into '||table_name||'(key_id) values(1)';(給str_test變量賦值,一句結束,加分號)
dbms_output.put_line(str_test);(輸出str_test的內容,可通過輸出的內容判斷,參數名是否傳正確)
execute immediate str_test;(執行sql語句串)
注:str_test := 'insert into '||table_name||'(key_id) values(1)'; 估計一開始可能會被'||table_name||'這個折磨的死去活來,後來同事一說才發現,原來這是拼接參數table_name的,首先是這一串'insert into ',然後是利用拼接符||拼接參數table_name,然後再用||拼接剩下的sql串'(key_id) values(1)',此處大家一定要小心。
4.結束執行區(求解釋是結束的執行區還是整個存儲過程,自己感覺結束的是執行區,和begin對應)
end;(有分號)
好啦,存儲過程建好了,下面就得調用了,
二、調用存儲過程
執行call table_test('account');
這裏大家要注意了,因爲table_test(table_name)參數table_name是verchar2類型,所以實參一定要加單引號,切記!!!!!!
好了,基本就這樣,有問題大家可以留言討論。這是最基本的,如果以後研究的多了,再貼上來跟大家分享。