適合我這種初學數據庫菜鳥的存儲過程的創建和調用詳細過程

初學數據庫,相信大家跟我這個菜鳥一樣,對“存儲過程”這種此物只應天上有的東西,應該是有點望洋興嘆、望而生畏了,不過大家別怕,俗話說的好,不怕你不會,就怕就不學,讓咱們一起學習一下吧!

因爲工作中涉及到了參數模式的存儲過程,所以就說這一塊吧,不過我到現在也沒搞明白,帶參和不帶參有啥具體區別,還望大家相互幫助,可以留言討論。

首先創建一個需要傳入表名的存儲過程,代碼如下

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類型,所以實參一定要加單引號,切記!!!!!!

好了,基本就這樣,有問題大家可以留言討論。這是最基本的,如果以後研究的多了,再貼上來跟大家分享。

 

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章