熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle PL/SQL語言入門

2022-06-13   來源: Oracle 

  背景介紹
  
  結構化查詢語言(Structured Query Language簡稱SQL)是用來訪問關系型數據庫一種通用語言屬於第四代語言(GL)其執行特點是非過程化即不用指明執行的具體方法和途徑而是簡單地調用相應語句來直接取得結果即可顯然這種不關注任何實現細節的語言對於開發者來說有著極大的便利然而有些復雜的業務流程要求相應的程序來描述這種情況下GL就有些無能為力了PL/SQL的出現正是為了解決這一問題PL/SQL是一種過程化語言屬於第三代語言它與CC++Java等語言一樣關注於處理細節可以用來實現比較復雜的業務邏輯本文主要介紹PL/SQL的編程基礎以使入門者對PL/SQL語言有一個總體認識和基本把握
  
  編程基礎知識
  
   程序結構
  
  PL/SQL程序都是以塊(block)為基本單位整個PL/SQL塊分三部分聲明部分(用declare開頭)執行部分(以begin開頭)和異常處理部分(以exception開頭)其中執行部分是必須的其他兩個部分可選無論PL/SQL程序段的代碼量有多大其基本結構就是由這三部分組成如下所示為一段完整的PL/SQL塊
  
  /*聲明部分以declare開頭*/
  declare v_id integer;
  v_name varchar();
  cursor c_emp is select * from employee where emp_id=;
  /*執行部分以begin開頭*/
  begin  open c_emp;             //打開游標
  loop
  fetch c_emp into v_idv_name;    //從游標取數據
  exit when c_emp%notfound ;
  end loop ;
  close c_emp;                 //關閉游標
  dbms_outputPUT_LINE(v_name);
  /*異常處理部分以exception開始*/
  exception
  when no_data_found then
  dbms_outputPUT_LINE(沒有數據);
  end ;
  
   控制結構
  
  PL/SQL程序段中有三種程序結構條件結構循環結構和順序結構
  
  ) 條件結構
  
  與其它語言完全類似語法結構如下
  
  if condition then
  statement
  else
  statement
  end if ;
  
  ) 循環結構
  
  這一結構與其他語言不太一樣在PL/SQL程序中有三種循環結構
  
  a loop … end loop;
  b while condition loop … end loop;
  c for variable in low_bound upper_bound loop … end loop;
  
  其中的代表循環體
  
  ) 順序結構
  
  實際就是goto的運用不過從程序控制的角度來看盡量少用goto可以使得程序結構更加的清晰
  
   變量聲明與賦值
  
  PL/SQL主要用於數據庫編程所以其所有的數據類型跟Oracle數據庫裡的字段類型是一一對應的大體分為數字型布爾型字符型和日期型這裡簡單介紹兩種常用數據類型numbervarchar
  
  number
  
  用來存儲整數和浮點數范圍為1ee其使用語法為
  
  number[(precision scale)]
  
  其中(precision scale)是可選的precision表示所有數字的個數scale表示小數點右邊數字的個數
  
  varchar
  
  用來存儲變長的字符串其使用語法為
  
  varchar[(size)]
  
  其中size為可選表示該字符串所能存儲的最大長度
  
  在PL/SQL中聲明變量與其他語言不太一樣它采用從右往左的方式聲明比如聲明一個number類型的變量v_id那其形式應為
  
  v_id number;
  
  如果給上面的v_id變量賦值不能用=應該用:=即形式為
  
  v_id :=;
  
   SQL基本命令
  
  PL/SQL使用的數據庫操作語言還是基於SQL的所以熟悉SQL是進行PL/SQL編程的基礎SQL語言的分類情況大致如下
  
  ) 數據定義語言(DDL)CreateDropGrantRevoke
  
  ) 數據操縱語言(DML)UpdateInsertDelete
  
  ) 數據控制語言(DCL)CommitRollbackSavapoint
  
  ) 其他Alter SystemConnectAllocate
  
  具體的語法結構可以參閱其他關於SQL語言的資料這裡不再贅述
  
  過程與函數
  
  PL/SQL中的過程和函數與其他語言的過程和函數一樣都是為了執行一定的任務而組合在一起的語句過程無返回值函數有返回值其語法結構為
  
  過程Create or replace procedure procname(參數列表) as PL/SQL語句塊
  
  函數Create or replace function funcname(參數列表) return 返回值 as PL/SQL語句塊
  
  為便於理解舉例如下
  
  問題假設有一張表t有f和f兩個字段f為number類型f為varchar類型要往t裡寫兩條記錄內容自定
  
  Create or replace procedure test_procedure as
  V_f number :=; /*聲明變量並賦初值*/
  V_f number :=;
  V_f varchar() :=first;
  V_f varchar() :=second;
  Begin
  Insert into t values (V_f V_f);
  Insert into t values (V_f V_f);
  End test_procedure; /*test_procedure可以省略*/
  
  至此test_procedure存儲過程已經完成經過編譯後就可以在其他PL/SQL塊或者過程中調用了函數與過程具有很大的相似性此處不再詳述
  
  游標
  
  游標的定義為用游標來指代一個DML SQL操作返回的結果集即當一個對數據庫的查詢操作返回一組結果集時用游標來標注這組結果集以後通過對游標的操作來獲取結果集中的數據信息這裡特別提出游標的概念是因為它在PL/SQL的編程中非常的重要定義游標的語法結構如下
  
  cursor cursor_name is SQL語句;
  
  在本文第一段代碼中有一句話如下
  
  cursor c_emp is select * from employee where emp_id=;
  
  其含義是定義一個游標c_emp代表employee表中所有emp_id字段為3的結果集當需要操作該結果集時必須完成三步打開游標使用fetch語句將游標裡的數據取出關閉游標請參照本文第一段代碼的注釋理解游標操作的三步驟
  
  其他概念
  
  PL/SQL中包的概念很重要主要是對一組功能相近的過程和函數進行封裝類似於面向對象中的名字空間的概念
  
  觸發器是一種特殊的存儲過程其調用者比較特殊是當發生特定的事件才被調用主要用於多表之間的消息通知
  
  至此就介紹了PL/SQL的編程基礎知識至於實際的應用以後接著探討
From:http://tw.wingwit.com/Article/program/Oracle/201311/18991.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.