oracle之路(三)—pl/sql 塊

來源:互聯網
上載者:User
--異常測試declarev_ename emp.empno%type;--定義變數beginselect ename into v_ename from emp where empno =  &gno;dbms_output.put_line('名字:' || v_ename);exception when no_data_found then      dbms_output.put_line('未找到');end;/

pl/sql是什麼
pl/sql(procedural language/sql)是oracle在標準的sql語言上的擴充。pl/sql不僅允許嵌入sql語言,還可以定義變數和常量,允許使用條件陳述式和迴圈語句,允許使用例外處理各種錯誤,這樣使得它的功能變得更加強大。
看圖:

為什麼學pl/sql
學習必要性
1.提高應用程式的運行效能
2.模組化的設計思想【分頁的過程,訂單的過程,轉賬的過程。。】
3.減少網路傳輸量
4.提高安全性(sql會包括表名,有時還可能有密碼,傳輸的時候會泄露。PL/SQL就不會)

為什麼PL/SQL會快呢?看圖:
不好的地方:
移植性不好(換資料庫就用不了),

用什麼編寫pl/sql
sqlplus開發工具

sqlplus是oracle公司提供的一個工具,這個因為我們在以前介紹過的:
舉一個簡單的案例:
編寫一個預存程序,該過程可以向某表中添加記錄。
1.建立一個簡單的表
 

Sql代碼

  1. create table mytest(name varchar2(30),passwd varchar2(30));  

createtable mytest(name varchar2(30),passwd varchar2(30));

2.建立過程

Sql代碼

  1. create or replace procedure sp_pro1 is  
  2. begin--執行部分   
  3. insert into mytest values('韓順平','m1234');   
  4. end;   
  5. /  

  create or replace procedure sp_pro1 is

  begin--執行部分

  insert into mytest values('韓順平','m1234');

  end;

  /

replace:表示如果有sp_pro1,就替換

如何查看錯誤資訊:showerror;

如何調用該過程:

1)exec 過程名(參數值1,參數值2...);

2)call 過程名(參數值1,參數值2...);

 

pl/sqln developer開發工具
pl/sql developer是用於開發pl/sql塊的整合式開發環境(ide),它是一個獨立的產品,而不是oracle的一個附帶品。
舉一個簡單案例:
編寫一個預存程序,該過程可以刪除某表記錄。

Sql代碼

  1. create or replace procedure sp_pro2 is  
  2. begin--執行部分   
  3. delete from mytest where name='韓順平';   
  4. end;  

createor replace procedure sp_pro2 is

begin--執行部分

deletefrom mytest where name='韓順平';

end;

 

pl/sql介紹

介紹

開發人員使用pl/sql編寫應用模組時,不僅需要掌握sql語句的編寫方法,還要掌握pl/sql語句及文法規則。pl/sql編程可以使用變數和邏輯控制語句,從而可以編寫非常有用的功能模組。比如:分頁預存程序模組、訂單處理預存程序模組、轉賬預存程序模組。而且如果使用pl/sql編程,我們可以輕鬆地完成非常複雜的查詢要求。

pl/sql可以做什麼
簡單分類

                  |————過程(預存程序)
                  |
                  |————函數
塊(編程)—————|
                  |————觸發器
                  |
                  |————包

編寫規範

1.注釋
單行注釋 --

Sql代碼

  1. select * from emp where empno=7788;  --取得員工資訊  

select* from emp where empno=7788;  --取得員工資訊

 

多行注釋 /*...*/來劃分
2.標誌符號的命名規範
1).當定義變數時,建議用v_作為首碼v_sal
2).當定義常量時,建議用c_作為首碼c_rate
3).當定義遊標時,建議用_cursor作為尾碼emp_cursor
4).當定義例外時,建議用e_作為首碼e_error

pl/sql塊介紹

介紹

塊(block)是pl/sql的基本程式單元,編寫pl/sql程式實際上就是編寫pl/sql塊,要完成相對簡單的應用功能,可能只需要編寫一個pl/sql塊,但是如果想要實現複雜的功能,可能需要在一個pl/sql塊中嵌套其它的pl/sql塊。

塊結構n

pl/sql塊由三個部分構成:定義部分,執行部分,例外處理部分。

如下所示:

Declare

/*定義部分——定義常量、變數、遊標、例外、複雜資料類型*/
begin
/*執行部分——要執行的pl/sql語句和sql語句*/
exception

/*例外處理部分——處理啟動並執行各種錯誤*/
end;

定義部分是從declare開始的,該部分是可選的;
執行部分是從begin開始的,該部分是必須的;
例外處理部分是從exception開始的,該部分是可選的。
可以和java編程結構做一個簡單的比較。

pl/sql塊的執行個體(1)

執行個體1-只包括執行部分的pl/sql塊

Sql代碼

  1. set serveroutput on --開啟輸出選項   
  2. begin    
  3.     dbms_output.put_line('hello');   
  4. end;  

setserveroutput on --開啟輸出選項

begin

    dbms_output.put_line('hello');

end;

相關說明:
dbms_output是oracle所提供的包(類似java的開發包),該包包含一些過程,put_line就是dbms_output包的一個過程。

 

pl/sql塊的執行個體(2)
執行個體2-包含定義部分和執行部分的pl/sql塊n

Sql代碼

  1. declare  
  2.     v_ename varchar2(5); --定義字串變數   
  3. begin  
  4.     select ename into v_ename from emp where empno=&aa;   
  5.     dbms_output.put_line('僱員名:'||v_ename);   
  6. end;   
  7. /  

declare

    v_ename varchar2(5); --定義字串變數

begin

    select ename into v_ename from emp whereempno=&aa;

    dbms_output.put_line('僱員名:'||v_ename);

end;

/

 

如果要把薪水也顯示出來,那麼執行部分就應該這麼寫:

Sql代碼

  1. select ename,sal into v_ename,v_sal from emp where empno=&aa;  

selectename,sal into v_ename,v_sal from emp where empno=&aa;

相關說明:
& 表示要接收從控制台輸入的變數。看圖:

pl/sql塊的執行個體(3)
執行個體3-包含定義部分,執行部分和例外處理部分n
  為了避免pl/sql程式的運行錯誤,提高pl/sql的健壯性,應該對可能的錯誤進行處理,這個很有必要。
1.比如在執行個體2中,如果輸入了不存在的僱員號,應當做例外處理。
2.有時出現異常,希望用另外的邏輯處理,[網示]
我們看看如何完成1的要求。
相關說明:
oracle事先預定義了一些例外,no_data_found就是找不到資料的例外。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.