Oracle存儲過程入門級實例


存儲過程是在面試中常被問到的程序員必備技能之一。很多朋友被問到時唯唯諾諾,吞吞吐吐,明顯自信不足。其實存儲過程無外乎就是特定的功能,在特定的層次實現。這些朋友可能會觸發器,但是不怎么用存儲過程而已。久而久之,談虎色變。為此作者寫了一個 Oracle存儲過程的入門級例子,用實例來幫這些朋友對存儲過程 say "Hello,world!"。只希望可以方便到大家。

  1 sql 語句創建一個用戶信息表 user_info

  CREATE TABLE user_info

  (

  id VARCHAR2(4),

  name VARCHAR2(15),

  pwd VARCHAR2(15),

  address VARCHAR2(30)

  );

  2 sql 語句創建一個存儲過程 AddNewUser

  CREATE OR REPLACE PROCEDURE AddNewUser

  (

  n_id user_info.id%TYPE,

  n_name user_info.name%TYPE,

  n_pwd user_info.pwd%TYPE,

  n_address user_info.address%TYPE

  )

  AS

  BEGIN

  --向表中插入數據

  INSERT INTO user_info(id,name,pwd,address)

  VALUES(n_id,n_name,n_pwd,n_address);

  END AddNewUser;

  /

  表有了,存儲過程有了,那么什么時候調用呢,又是如何調用的呢?

  3 存儲過程的調用

  --下面我們利用PL/SQL匿名塊調用該過程

  DECLARE

  --描述新用戶的變量

  v_id user_info.id%TYPE := 'u002';

  v_name user_info.name%TYPE := 'wish';

  v_pwd user_info.pwd%TYPE := 'history';

  v_add user_info.address%TYPE := 'shanghai';

  BEGIN

  --調用過程,添加wish用戶到數據庫

  AddNewUser(v_id,v_name,v_pwd,v_add);

  DBMS_OUTPUT.PUT_LINE('用戶 ' || v_name || ' 已經成功插入');

  END;

  /

  證明存儲過程編寫 OK

  我們在程序中(或者 sql 可以出現的任何地方),使用 sql 調用我們剛寫好的存儲過程:

  --利用EXEC()直接插入

  EXEC AddNewUser('u003','jian','jian','beijing');

  --或

  EXECUTE AddNewUser('u004','zhang','zhang','beijing');

  完畢。

  細心地讀者會發現:存儲過程不就是對 sql 語句的封裝么?有了 AddNewUser 這個存儲過程,每次插入的時候我們不用寫 sql 語句 insert ... 了。

  很對,存儲過程本質上就是對業務關系復雜的 sql 語句的封裝。sql 語句以程序塊的形式被封裝在了數據庫中了。寫好了以后,無論是 java,還是 .net ,抑或其他開發語言,可以像使用 sql 語句那樣隨意調用。這就是數據庫開發。

  另外,過程與函數的差別:函數與過程有很多相似的地方,但也有一些差別,其中的一點就是,過程的參數可以有三種模式(IN、OUT、IN OUT),而函數只有一種(IN),因為使用函數的目的是傳入0或多個參數,返回單一的值,想讓函數返回多個值是一種不良的編程習慣,我們應該加以改正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM