- create table myinfo (myname varchar2(10),passwd varchar(10));
基於以上表myinfo
PL/SQL(procedural language/sql):是Oracle基於標準SQL語言的擴充,在PL/SQL中你可以嵌套sql語句、定義變數、定義常量、使用邏輯語句(條件陳述式,迴圈語句等)、使用例外處理各種錯誤(例外(EXCEPTION)是一種PL/SQL標識符。如果運行PL/SQL塊時出現錯誤或警告,則會觸發例外,當觸發例外時,預設情況下會終止PL/SQL塊的執行,通過在PL/SQL塊中引入例外處理部分。可以捕捉各種例外,並根據例外出現的情況進行相應的處理。類似java中的try catch),既然是擴充,當然會使得他的功能更加強大!
PL/SQL是強大的資料庫過程語言!
重要的是:重要的是PL/SQL緊密的結合在Oracle資料庫裡面。
PL/SQL是Oracle資料庫使用的三種語言的其中之一,另外兩個是SQL和Java。
功能近似PL/SQL的程式語言和其他關係型資料庫:Sybase ASE、Microsoft SQL Server的Transact-SQL,PostgreSQL資料庫的PL/pgSQL(模仿PL/SQL)和IBM DB2的SQL PL[1],都符合ISO SQL的SQL/PSM標準。
---------------------------------------------------------------------------------------------------
pl/sql的優點:
提高應用程式的運行效能、模組化設計、減少網路傳輸量、提高安全性
(傳統的資料庫操作,我們想想:SQL語句寫在java程式訪問資料庫,首先獲得串連,編譯SQL語句,使得資料庫能夠認識你的SQL語句,這裡每次編譯就浪費了一些時間,當資料訪問量很大的時候,你的程式效能就比較差了!這裡如果我們把某些操作寫為一個過程,比如分頁、轉賬過程(功能劃分為一個模組,由專人負責維護……)。就可以使得我們的程式效能大大提高,從而資料庫操作作為一個模組,當java程式調用時就是調用已經編譯的SQL語句,所以在進行程式最佳化時可以考慮用預存程序進行最佳化。)
【當然還有其他有點好處,歡迎補充】
缺點:
當需要換資料庫時,移植性存在缺陷
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PL/SQL編寫規範:
A:
單行注釋:--
多行注釋:/*……*/
B:
標識符的命名規範:
a.定義變數,建議用v_作為首碼, 例:v_sale
b.定義常量,建議用c_作為首碼,例:c_rate
c.定義遊標,建議用_cursor作為尾碼例:emp_cursor
d.定義例外,建議用e_作為首碼例:e_error
-----------------------------------------------------------------------------------
PL/SQL是以塊為基本單位,塊分類{主要有預存程序,函數,觸發器,包}
塊(block)的介紹:
上面說了,PL/SQL是以塊為基本單位,,我們編寫PL/SQL就是在編寫塊,簡單的應用功能,我們可能只需要一個PL/SQL塊就可以實現,複雜的功能就需要多個塊了,塊可以嵌套。
塊由三部分組成:{定義部分、執行部分、例外處理部分},即:
declare (可選)
/*聲明部分---定義常量、變數。遊標、例外、複雜資料類型*/
begin (必須滴)
/*執行部分---需要執行的pl/sql語句和SQL語句*/
exception(可選的)
/*處理啟動並執行各種錯誤*/
end;(必須滴)
編寫一個簡單的塊先:
例子,
- set serveroutput on; --開啟輸出選項
-
- begin
- dbms_output.put_line('hello,world'); --輸出 hello world
- end;
- /
例子,
- declare
- v_name varchar2(10); --定義變數
- begin
- select myname into v_name where passwd=&pswd;
- dbms_output.put_line('這是字串拼接:'||v_name);
- end;
- /
例子,外加顯示密碼:
- declare
- v_name varchar2(10); --定義變數
- v_psw varchar2(10);
- begin
- select myname,passwd into v_name,v_psw where passwd=&psw;
- dbms_output.put_line('這是字串拼接:'||v_name||' password is '||v_psw);
- end;
- /
這裡都會彈出一個框,讓輸入就是psw的值,where passwd=&psw
例外的情況,如果查詢不到資料呢?oracle中會拋出異常,
這裡我們就可以使用例外了,Exception
- declare
- v_name varchar2(10); --定義變數
- v_psw varchar2(10);
- begin
- select myname,passwd into v_name,v_psw where passwd=&psw;
- dbms_output.put_line('這是字串拼接:'||v_name||' password is '||v_psw);
- --異常處理
- exception
- when no_data_found then
- dbms_output.put_line('未找到匹配資料');
- end;
- /