PLSQL編程基礎(chǔ)總結(jié)(共9頁)_第1頁
PLSQL編程基礎(chǔ)總結(jié)(共9頁)_第2頁
PLSQL編程基礎(chǔ)總結(jié)(共9頁)_第3頁
PLSQL編程基礎(chǔ)總結(jié)(共9頁)_第4頁
PLSQL編程基礎(chǔ)總結(jié)(共9頁)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、PL/SQL編程基礎(chǔ)總結(jié)1 PL/SQL簡介PL/SQL是一種程序語言,被稱作過程花SQL語言(Procedural Language/SQL),是oracle數(shù)據(jù)庫對SQL語言的擴展1.1 優(yōu)點:具有更高,更高效,更可控制等特點1.2 定義:Oracle是一種使用比較廣泛的關(guān)系型數(shù)據(jù)庫,而用來訪問關(guān)系型數(shù)據(jù)庫的語言稱為“結(jié)構(gòu)化語言”,即SQL而PL/SQL=SQL+邏輯,在SQL語言的基礎(chǔ)上,增加了編程語言的特性2 PL/SQL程序塊聲明部分 declare .程序段開始 begin異常處理exception.程序段結(jié)束 end;2.1 注意:分號:declare,begin和excepti

2、on后沒有分號,而end以及所有SQL語句和PL/SQL語句都必須以分號結(jié)束3 變量用來實現(xiàn)信息的保持和結(jié)構(gòu)3.1 定義變量在declare和begin之間語法:declarevariable_name type not null:=value3.2 變量的命名規(guī)則1、 以英文字母開始,包括字母,數(shù)字,$,下劃線(_)2、 長度不可超過30個字符3、 變量名中不可有空格4、 變量名不能使用關(guān)鍵字命名3.3 作用域變量聲明對于塊是本地的,當(dāng)塊完成后,變量也就不存在了,即變量聲明的作用域僅限于當(dāng)前程序庫,出了當(dāng)前程序就無效了3.4 給變量賦值3.4.1 :=3.4.2 select into3.4

3、.2.1 語法:select select_list -檢索出來的結(jié)果集字段into varibale_name,variable_name表示想要賦值的變量名from table_namewhere condition 注意1、 查詢只能返回一條記錄,多條或0條都會產(chǎn)生異常2、 into語句必須在select和from子句之間3、 into后需要賦值的變量的數(shù)據(jù)類型必須和select子句中檢索出的數(shù)據(jù)類型一致4、 into需要賦值的變量個數(shù)需要和select查詢出的字段數(shù)一致3.5 從鍵盤接受數(shù)據(jù)變量 := &變量名;&表示從鍵盤接受數(shù)據(jù)3.6 以列名或變量名作為前綴來聲明變量

4、變量名 表名.列名%TYPE變量名 其他變量名%TYPE3.7 以某張的完整行來聲明變量變量名 表名%rowtype;(這個類似集合,數(shù)組)使用時用:.變量.字段3.8 PL/SQL注意事項1、 全部保留字,Oracle的內(nèi)置函數(shù),程序包以及用戶定義的數(shù)據(jù)類型都用大寫2、 每行只寫一條語句,逗號后面以及運算符的前后都應(yīng)加空格3、 變量名稱都要使用有意義的名稱命名4、 命名使用“_”的連接方式,而不是用大小寫混合方式5、 變量前最后加上前綴,以表示該變量的數(shù)據(jù)類型,作用范圍等a) 當(dāng)定義變量時,建立用v_作為前綴b) 當(dāng)定義常量時,建議用c_作為前綴c) 當(dāng)定義異常時,建議用e_作為前綴-升級變

5、量的使用,實現(xiàn)根據(jù)商品ID查詢商品名稱,商品價格,上架時間,庫存,并聯(lián)機輸出 declare v_id number := &ID;-接受用戶輸入的商品ID v_name es_%TYPE;-商品名稱 v_price es_product.price%TYPE;-商品價格 v_saledate es_product.saledate%TYPE;-上架時間 v_stock_count es_product.stockcount%TYPE;-庫存量 begin select name,price,saledate,stockcount into v_name,v_price

6、,v_saledate,v_stock_count from es_product where ID = v_id; dbms_output.put_line(v_name | | v_price | | v_saledate | | v_stock_count); end; -繼續(xù)升級變量的使用,實現(xiàn)根據(jù)商品ID查詢商品名稱,商品價格,上架時間,庫存,并聯(lián)機輸出 declare v_id number := &ID;-接受用戶輸入的商品ID v_er_pro es_product%rowtype;-表的完整行變量 begin select name,price,saledate,stockc

7、ount into v_er_,v_er_pro.price,v_er_pro.saledate,v_er_pro.stockcount from es_product where ID = v_id; dbms_output.put_line(v_er_ | | v_er_pro.price | |v_er_pro.saledate | | v_er_pro.stockcount); end;4 編寫SQL代碼的方法(用PL/SQL Developer工具)4.1 SQL windows4.2 command windows以“/”表示運行如果程序有內(nèi)容輸出查

8、看結(jié)果:set serveroutput on;然后再寫SQL程序,“”運行SQL windows:-使用的數(shù)據(jù)表select * from es_product;select * from es_user;select * from es_order;select * from es_orderdetail;-使用變量,實現(xiàn)根據(jù)商品檢索商品庫存declare v_id number := &ID;-接受用戶輸入的商品ID v_stock_count number; -商品的庫存量begin select stockcount INTO v_stock_count from es_produc

9、t where ID = v_id;-這里一定要分號 dbms_output.put_line(v_stock_count);end;command windowsdeclare v_id number := &ID;-接受用戶輸入的商品ID v_stock_count number; -商品的庫存量begin select stockcount INTO v_stock_count from es_product where ID = v_id;-這里一定要分號 dbms_output.put_line(v_stock_count);end;5 IF結(jié)構(gòu)if 條件 THEN如果滿足條件執(zhí)行代

10、碼塊-代碼塊end if5.1 語法結(jié)構(gòu)if 條件 THEN如果滿足條件執(zhí)行代碼塊-代碼塊1else-代碼塊2end if5.2 語法結(jié)構(gòu)2if 條件 THEN如果滿足條件執(zhí)行代碼塊-代碼塊1elsif-代碼塊2else-代碼塊3end if5.3 語法結(jié)構(gòu)3-更新庫存量:購買商品時declare v_id es_product.id%TYPE := &id; v_stock_count es_product.stockcount%TYPE;begin -查詢到了商品庫存量 select stockcount into v_stock_count from es_product where i

11、d = v_id; -根據(jù)庫存進行判斷,如果庫存0購買,反之,不能購買 if v_stock_count 0 then update es_product set stockcount = stockcount - 1 where id = v_id; commit; dbms_output.put_line(商品庫存已經(jīng)更新); -elsif else dbms_output.put_line(商品庫存為0無法更新); end if;end;6 casecase when 值=表達式1 then代碼段1when值=表達式2 then代碼段.else代碼段3end casecase值when

12、表達式1 then代碼段1when 表達式2 then代碼段.else代碼段3end case-根據(jù)商品ID查詢商品價格,價格1000輸出“很貴”,價格在100-1000之間的顯示“一般”,價格在100一下的顯示“便宜”declare v_id number := &ID; v_name varchar(20); v_price es_product.price%TYPE;begin select price into v_price from es_product where id = v_id; case when v_price 1000 then v_name := 價格很貴; whe

13、n v_price 100 then v_name := 一般; else v_name := 便宜; end case; dbms_output.put_line(v_name); end;declare v_id es_order.id%TYPE := &ID; v_status es_order.status%TYPE; v_status_name varchar2(20);-狀態(tài)名字begin select status into v_status from es_order where id = v_id; case when v_status = 1 then v_status_n

14、ame :=訂單已提交; when v_status = 2 then v_status_name := 已付款; when v_status = 3 then v_status_name := 已完成; else v_status_name := 未知狀況; end case; dbms_output.put_line(v_status_name); end;declare v_id es_order.id%TYPE := &ID; v_status es_order.status%TYPE; v_status_name varchar2(20);-狀態(tài)名字begin select stat

15、us into v_status from es_order where id = v_id; case v_status when 1 then v_status_name :=訂單已提交; when 2 then v_status_name := 已付款; when 3 then v_status_name := 已完成; else v_status_name := 未知狀況; end case; dbms_output.put_line(v_status_name); end;7 循環(huán)控制loop -代碼塊exit when conditionend loop7.1 LOOP7.1.1

16、弊端:1、 循環(huán)可讀性差,必須通過exit退出循環(huán)2、 exit容易忘記,或者循環(huán)條件不正確可能早餐死循環(huán)for 循環(huán)變量 in 循環(huán)開始.循環(huán)結(jié)束 loop-代碼塊end loop7.2 for循環(huán)適用不知道具體循環(huán)次數(shù)的情況while 循環(huán)條件 loop-代碼塊end loop7.3 while循環(huán)適用于不知道具體循環(huán)次數(shù)的情況-使用循環(huán)初始化商品類別信息-loop循環(huán)declare v_id es_sort.id%TYPE := 5; v_sortname es_sort.sortname%TYPE := 類別; v_fatherid es_sort.fatherid%TYPE :=0;

17、 begin loop insert into es_sort values(v_id,v_sortname|v_id,v_fatherid); v_id := v_id + 1; exit when v_id = 8; end loop; commit; dbms_output.put_line(插入成功);end;-for循環(huán)declare v_id es_sort.id%TYPE; v_sortname es_sort.sortname%TYPE := 類別; v_fatherid es_sort.fatherid%TYPE := 0;begin for v_id in 9.11 loo

18、p insert into es_sort values(v_id,v_sortname|v_id,v_fatherid); end loop; commit;-忘記提交了 dbms_output.put_line(插入成功);end;-while循環(huán)declare v_id es_sort.id%TYPE := 12; v_sortname es_sort.sortname%TYPE := 類別; v_fatherid es_sort.fatherid%TYPE := 0;begin while v_id = 12 and v_id 0 then update es_product set

19、stockcount = stockcount - 1 where id = v_id; commit; dbms_output.put_line(數(shù)據(jù)庫中更新成功); else dbms_output.put_line(數(shù)據(jù)庫中已經(jīng)沒有庫存了); end if; exception when no_data_found then dbms_output.put_line(數(shù)據(jù)庫中不存在該商品); rollback; when too_many_rows then dbms_output.put_line(數(shù)據(jù)庫中存在多條數(shù)據(jù)); rollback; when others then dbms_output.put_line(發(fā)生其他錯誤); rollback;end;8.3 自定義異常8.3.1 語法declare v_id es_product.id%TYPE := &ID; e_no_result exception;begin delete es_order where id=v_id; if SQL%NOTFOUND then-SQL%NOTFOUND表示前面的SQL語句沒有刪除任何數(shù)據(jù) raise e_no_result; end if; exception when e_no_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論