1. 程式人生 > >PL-SQL程式設計基礎(1)

PL-SQL程式設計基礎(1)

一、什麼是PL-SQL

  PL-SQL是結合了Oracle過程語言和結構化查詢語言(SQL)的一種擴充套件語言。具體來說,PL-SQL就是在普通的SQL語句的基礎上增加了程式語言的特點,將資料操作和查詢語句組織在PL-SQL程式碼的過程性單元中,通過邏輯判斷、迴圈等操作實現複雜的功能或者計算的程式語言。

  使用PL-SQL有以下優點:

  1、能夠把一組SQL語句放到一個模組中。使其更具模組化特點。

  2、可以在PL-SQL中增加邏輯結構判斷、迴圈等程式結構。

  3、具有異常處理功能。使程式不會中斷。

  4、減少網路互動,提高效能。

  5、具有更好的移植性。

二、PL-SQL程式塊

PL-SQL程式塊包括五個部分,宣告部分,程式段開始,程式碼主體部分,異常部分,程式結束。

DECLARE                    --宣告部分
    宣告變數、常量、遊標、使用者自定義異常的宣告
    ....
BEGIN   --程式開始部分
    SQL語句和PL-SQL語句構成的執行語句    --程式碼主體部分
    ...
    EXCEPTION
        程式出現異常時,捕獲異常並處理異常。  --異常部分
        ...
END;    --程式結束部分

注意:

1、其中宣告部分和異常部分是可選的。

2、DELCARE,BEGIN和EXCEPTION後沒有分號,而END和其他所有的PL-SQL語句後必須以分號結束!

三、變數的宣告與賦值

1、定義變數的語法:

  DECLARE variable_name date_type(size) [not null][:=value]

  DECLARE:定義變數所使用的關鍵字。

  variable_name:變數的名稱。

  date_type(size):變數的型別,size表示資料長度。

  [not null]:變數不允許為空。

  [:=value]:為變數賦初始值。

示例:  

DECLARE 
    v_name varchar2(20);    --宣告一個字串型別的變數
    v_age number:=&age;     --宣告一個數字型別的變數   &age表示輸入資料,會臨時彈出一個輸入框讓我們輸入資料。

 PL-SQL中的變數命名規則:

  1、變數名首字母必須是英文字母,後面可以跟上字母、數字、下劃線,#,$。

  2、變數名長度不超過30個字元。

  3、變數名中不能有空格。

  4、不能使用關鍵字命名。

注意:

  變數的宣告只在當前程式塊中有效。

2、變數的使用和賦值

  a.使用:=進行賦值

  v_name := 'wangwu';  --直接將'wangwu'賦值給變數v_name;

  b.使用select..into..進行賦值

DECLARE
  PROID NUMBER := &ID;
  PNAME VARCHAR(20);
BEGIN
  SELECT NAME INTO PNAME FROM ES_PRODUCT WHERE ID = PROID;  --將name列的值賦給pname
  DBMS_OUTPUT.PUT_LINE(PNAME);
END;

  注意:

    1) 查詢結果只能返回單條記錄,多條或者0條都會返回異常。

    2) into語句必須是在select 和 from 字句之間。

    3)into所檢索出的資料型別必須和變數的型別一致。

    4) into後賦值變數的個數必須和select查詢出的變數個數一致。

  如果使用命令列執行PL-SQL程式碼塊,使用/表示執行程式碼塊,然後通過 set serveroutput on;開啟輸出內容!

  c.一次對多個變數進行賦值,並且變數的型別使用表中的型別。

DECLARE
  v_id NUMBER := &ID;                    --定義輸入變數
  v_name  es_product.Name%TYPE;           --定義變數,和es_product.name的型別一致
  v_price es_product.Price%TYPE;  
BEGIN
  SELECT p.name,p.price
 INTO v_name, v_price 
 FROM es_product p 
 WHERE ID=v_id;   --對多個變數進行賦值,這裡只能返回單條記錄。
  DBMS_OUTPUT.PUT_LINE('id:' || v_id || 'name:' || v_name || 'price:' || v_price);   --輸出內容
END;

  d.定義資料行,使用資料行可以儲存多個變數的值。以一個整體儲存一條記錄的列的資訊。(類似物件的方式)

DECLARE
  v_id NUMBER := &ID;
  v_row es_product%ROWTYPE;             --定義變數,es_product.rowtype為esproduct的行型別
BEGIN 
  SELECT p.name,p.price 
  INTO v_row.name, v_row.price 
  FROM es_product p 
  WHERE ID=v_id; 
  DBMS_OUTPUT.PUT_LINE('id:' || v_id || 'name:' || v_row.name || 'price:' || v_row.price); 
END;