




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第7講 PL/SQL 塊的結(jié)構(gòu)和實(shí)例 1PL/SQL 塊的結(jié)構(gòu)和實(shí)例學(xué)習(xí)目標(biāo)理解oracle 的pl/sql 概念掌握pl/sql 編程技術(shù)(包括編寫過程、函數(shù)、觸發(fā)器.)pl/sql 的介紹pl/sql 是什么pl/sql(procedural language/sql)是oracle 在標(biāo)準(zhǔn)的sql 語言上的擴(kuò)展。pl/sql 不僅允許嵌入sql 語言,還可以定義變量和常量,允許使用條件語句和循環(huán)語句,允許使用例外處理各種錯誤,這樣使得它的功能變得更加強(qiáng)大。2PL/SQL 塊的結(jié)構(gòu)和實(shí)例學(xué)習(xí)必要性1.提高應(yīng)用程序的運(yùn)行性能2.模塊化的設(shè)計思想【分頁的過程,訂單的過程,轉(zhuǎn)賬的過程?!?.減少
2、網(wǎng)絡(luò)傳輸量4.提高安全性(sql 會包括表名,有時還可能有密碼,傳輸?shù)臅r候會泄露。PL/SQL就不會)為什么PL/SQL 會快呢?不好的地方:移植性不好(換數(shù)據(jù)庫就用不了) 3PL/SQL 塊的結(jié)構(gòu)和實(shí)例 sqlplus 開發(fā)工具sqlplus 是oracle 公司提供的一個工具,這個因?yàn)槲覀冊谝郧敖榻B過的:舉一個簡單的案例:編寫一個存儲過程,該過程可以向某表中添加記錄。一個簡單的存儲過程CREATE OR REPLACE PROCEDURE proc_helloworldISBEGIN DBMS_OUTPUT.put_line (Hello World!);END;/4PL/SQL 塊的結(jié)構(gòu)
3、和實(shí)例 需要在屏幕上顯示出DBMS_OUTPUT.put_line的輸出字符串,需要做一個小小的設(shè)置SQL show serveroutputserveroutput OFF SQL set serveroutput on SQL show serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED1.創(chuàng)建一個簡單的表Sql 代碼1. create table mytest(name varchar2(30),passwd varchar2(30); 5PL/SQL 塊的結(jié)構(gòu)和實(shí)例 2.創(chuàng)建過程Sql 代碼1. create or replace proced
4、ure sp_pro1 is2. begin-執(zhí)行部分3. insert into mytest values(楊世順,m1234);4. end;5. /replace:表示如果有sp_pro1,就替換如何查看錯誤信息:show error;如何調(diào)用該過程:1)exec 過程名(參數(shù)值1,參數(shù)值2.);SQL執(zhí)行2)call 過程名(參數(shù)值1,參數(shù)值2.);程序調(diào)用 6PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sqln developer開發(fā)工具pl/sql developer 是用于開發(fā)pl/sql 塊的集成開發(fā)環(huán)境(ide),它是一個獨(dú)立的產(chǎn)品,而不是oracle 的一個附帶品。舉一個簡單案例
5、:編寫一個存儲過程,該過程可以刪除某表記錄。Sql 代碼1. create or replace procedure sp_pro2 is2. begin-執(zhí)行部分3. delete from mytest where name=楊世順;4. end; 7PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sql 基礎(chǔ)pl/sql 介紹開發(fā)人員使用pl/sql 編寫應(yīng)用模塊時,不僅需要掌握sql 語句的編寫方法,還要掌握pl/sql 語句及語法規(guī)則。pl/sql 編程可以使用變量和邏輯控制語句,從而可以編寫非常有用的功能模塊。比如:分頁存儲過程模塊、訂單處理存儲過程模塊、轉(zhuǎn)賬存儲過程模塊。而且如果使用pl/s
6、ql 編程,我們可以輕松地完成非常復(fù)雜的查詢要求。pl/sql 可以做什么簡單分類過程(存儲過程)函數(shù)塊(編程)觸發(fā)器包8PL/SQL 塊的結(jié)構(gòu)和實(shí)例 編寫規(guī)范編寫規(guī)范n1.注釋單行注釋 -Sql 代碼1. select * from emp where empno=7788; -取得員工信息多行注釋 /*.*/來劃分2.標(biāo)志符號的命名規(guī)范1).當(dāng)定義變量時,建議用v_作為前綴v_sal2).當(dāng)定義常量時,建議用c_作為前綴c_rate3).當(dāng)定義游標(biāo)時,建議用_cursor 作為后綴emp_cursor4).當(dāng)定義例外時,建議用e_作為前綴e_error 9PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl
7、/sql 塊介紹介紹n塊(block)是pl/sql 的基本程序單元,編寫pl/sql 程序?qū)嶋H上就是編寫pl/sql 塊,要完成相對簡單的應(yīng)用功能,可能只需要編寫一個pl/sql 塊,但是如果想要實(shí)現(xiàn)復(fù)雜的功能,可能需要在一個pl/sql 塊中嵌套其它的pl/sql 塊。塊n結(jié)構(gòu)示意圖pl/sql 塊由三個部分構(gòu)成:定義部分,執(zhí)行部分,例外處理部分。如下所示:declare/*定義部分定義常量、變量、游標(biāo)、例外、復(fù)雜數(shù)據(jù)類型*/begin/*執(zhí)行部分要執(zhí)行的pl/sql 語句和sql 語句*/exception/*例外處理部分處理運(yùn)行的各種錯誤*/end;定義部分是從declare 開始的,
8、該部分是可選的;執(zhí)行部分是從begin 開始的,該部分是必須的;例外處理部分是從exception 開始的,該部分是可選的??梢院蚸ava 編程結(jié)構(gòu)做一個簡單的比較。 10PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sql 塊的實(shí)例(1)實(shí)例1-只包括執(zhí)行部分的pl/sql 塊nSql 代碼1. set serveroutput on -打開輸出選項(xiàng)2. begin3. dbms_output.put_line(hello);4. end;相關(guān)說明:dbms_output 是oracle 所提供的包(類似java 的開發(fā)包),該包包含一些過程,put_line 就是dbms_output 包的一個過程
9、。 11PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sql 塊的實(shí)例(2)實(shí)例2-包含定義部分和執(zhí)行部分的pl/sql 塊nSql 代碼1. declare2. v_ename varchar2(5); -定義字符串變量3. begin4. select ename into v_ename from emp where empno=&aa;5. dbms_output.put_line(雇員名:|v_ename);6. end;7. /如果要把薪水也顯示出來,那么執(zhí)行部分就應(yīng)該這么寫:Sql 代碼1. select ename,sal into v_ename,v_sal from emp wher
10、e empno=&aa;相關(guān)說明:& 表示要接收從控制臺輸入的變量 12PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sql 塊的實(shí)例(3)實(shí)例3-包含定義部分,執(zhí)行部分和例外處理部分為了避免pl/sql 程序的運(yùn)行錯誤,提高pl/sql 的健壯性,應(yīng)該對可能的錯誤進(jìn)行處理,這個很有必要。1.比如在實(shí)例2 中,如果輸入了不存在的雇員號,應(yīng)當(dāng)做例外處理。2.有時出現(xiàn)異常,希望用另外的邏輯處理我們看看如何完成1 的要求。相關(guān)說明:oracle 事先預(yù)定義了一些例外,no_data_found 就是找不到數(shù)據(jù)的例外。Sql 代碼1. declare2. -定義變量3. v_ename varchar2(5);
11、4. v_sal number(7,2);5. begin6. -執(zhí)行部分7. select ename,sal into v_ename,v_sal from emp where empno=&aa;8. -在控制臺顯示用戶名9. dbms_output.put_line(用戶名是:|v_ename| 工資:|v_sal);10. -異常處理11.exception12.when no_data_found then13. dbms_output.put_line(朋友,你的編號輸入有誤!);14.end;15./13PL/SQL 塊的結(jié)構(gòu)和實(shí)例 pl/sql分類 - 過程,函數(shù),包,觸發(fā)器
12、 過程過程用于執(zhí)行特定的操作,當(dāng)建立過程時,既可以指定輸入?yún)?shù)(in),也可以指定輸出參數(shù)(out), 通過在過程中使用輸入?yún)?shù),可以將數(shù)據(jù)傳遞到執(zhí)行部分;通過使用輸出參數(shù),可以將執(zhí)行部分的數(shù)據(jù)傳遞到應(yīng)用環(huán)境。在sqlplus 中可以使用create procedure 命令來建立過程。14PL/SQL 塊的結(jié)構(gòu)和實(shí)例 實(shí)例如下:1.請考慮編寫一個過程,可以輸入雇員名,新工資,可修改雇員的工資2.如何調(diào)用過程有兩種方法; exec call3.如何在java 程序中調(diào)用一個存儲過程問題:如何使用過程返回值?特別說明:對于過程我們會在以后給大家詳細(xì)具體的介紹,現(xiàn)在請大家先有一個概念。create
13、 procedure sp_pro3(spName varchar2, newSal number) is-不要寫成number(3,2),表明類型就可以了,不需要大小。就好像Java 寫方法時的參數(shù)一樣Sql 代碼1. begin2. -執(zhí)行部分,根據(jù)用戶名去修改工資3. update emp set sal=newSal where ename=spName;4. end;5. /15PL/SQL 塊的結(jié)構(gòu)和實(shí)例 java 程序中調(diào)用一個存儲過程/演示java 程序去調(diào)用oracle 的存儲過程案例5. try6. /1.加載驅(qū)動7. Class.forName(oracle.jdbc.d
14、river.OracleDriver);8. /2.得到連接9. Connection ct = DriverManager.getConnection(jdbc:oracle:thin:1521:MYORA1,scott,m123);11. /3.創(chuàng)建CallableStatement12. CallableStatement cs = ct.prepareCall(call sp_pr3(?,?);13. /4.給?賦值14. cs.setString(1,SMITH);15. cs.setInt(2,10);17. cs.execute();18. /關(guān)閉19. cs.close();2
15、0. ct.close();21. catch(Exception e)22. e.printStackTrace();23. 24. 25.16PL/SQL 塊的結(jié)構(gòu)和實(shí)例 1.使用各種if 語句2.使用循環(huán)語句3.使用控制語句goto 和null;條件分支語句pl/sql 中提供了三種條件分支語句ifthen,if then else,if then elsif then這里我們可以和java 語句進(jìn)行一個比較簡單的條件判斷 if thenn問題:編寫一個過程,可以輸入一個雇員名,如果該雇員的工資低于2000,就給該員工工資增加10%。Sql 代碼1. create or replace
16、procedure sp_pro6(spName varchar2) is2. -定義3. v_sal emp.sal%type;4. begin5. -執(zhí)行6. select sal into v_sal from emp where ename=spName;7. -判斷8. if v_sal2000 then9. update emp set sal=sal+sal*10% where ename=spName;10. end if;11.end;12./17PL/SQL 塊的結(jié)構(gòu)和實(shí)例 二重條件分支 if then else問題:編寫一個過程,可以輸入一個雇員名,如果該雇員的補(bǔ)助不是0
17、 就在原來的基礎(chǔ)上增加100;如果補(bǔ)助為0 就把補(bǔ)助設(shè)為200;Sql 代碼1. create or replace procedure sp_pro6(spName varchar2) is2. -定義3. v_comm m%type;4. begin5. -執(zhí)行6. select comm into v_comm from emp where ename=spName;7. -判斷8. if v_comm0 then9. update emp set comm=comm+100 where ename=spName;10. else11. update emp set comm=comm+
18、200 where ename=spName;12. end if;13.end;14./18PL/SQL 塊的結(jié)構(gòu)和實(shí)例 多重條件分支 if then elsif thenn問題:編寫一個過程,可以輸入一個雇員編號,如果該雇員的職位是PRESIDENT就給他的工資增加1000,如果該雇員的職位是MANAGER 就給他的工資增加500,其它職位的雇員工資增加200。Sql 代碼1. create or replace procedure sp_pro6(spNo number) is2. -定義3. v_job emp.job%type;4. begin5. -執(zhí)行6. select job
19、into v_job from emp where empno=spNo;7. if v_job=PRESIDENT then8. update emp set sal=sal+1000 where empno=spNo;9. elsif v_job=MANAGER then10. update emp set sal=sal+500 where empno=spNo;11. else12. update emp set sal=sal+200 where empno=spNo;13. end if;14.end;15./19PL/SQL 塊的結(jié)構(gòu)和實(shí)例 循環(huán)語句 loop是pl/sql 中最
20、簡單的循環(huán)語句,這種循環(huán)語句以loop 開頭,以end loop 結(jié)尾,這種循環(huán)至少會被執(zhí)行一次。案例:現(xiàn)有一張表users,表結(jié)構(gòu)如下:用戶id | 用戶名請編寫一個過程,可以輸入用戶名,并循環(huán)添加10 個用戶到users 表中,用戶編號從1 開始增加。Sql 代碼1. create or replace procedure sp_pro6(spName varchar2) is2. -定義 :=表示賦值3. v_num number:=1;4. begin5. loop6. insert into users values(v_num,spName);7. -判斷是否要退出循環(huán)8. exi
21、t when v_num=10;9. -自增10. v_num:=v_num+1;11. end loop;12.end;13./20PL/SQL 塊的結(jié)構(gòu)和實(shí)例 循環(huán)語句 while 循環(huán)n基本循環(huán)至少要執(zhí)行循環(huán)體一次,而對于while 循環(huán)來說,只有條件為true時,才會執(zhí)行循環(huán)體語句,while 循環(huán)以while.loop 開始,以end loop 結(jié)束。案例:現(xiàn)有一張表users,表結(jié)構(gòu)如下:用戶id 用戶名問題:請編寫一個過程,可以輸入用戶名,并循環(huán)添加10 個用戶到users 表中,用戶編號從11 開始增加。Sql 代碼1. create or replace procedure
22、sp_pro6(spName varchar2) is2. -定義 :=表示賦值3. v_num number:=11;4. begin5. while v_num=20 loop6. -執(zhí)行7. insert into users values(v_num,spName);8. v_num:=v_num+1;9. end loop;10.end;11./21PL/SQL 塊的結(jié)構(gòu)和實(shí)例 循環(huán)語句 for 循環(huán)n基本for 循環(huán)的基本結(jié)構(gòu)如下Sql 代碼1. begin2. for i in reverse 1.10 loop3. insert into users values (i, xi
23、aoming);4. end loop;5. end;22PL/SQL 塊的結(jié)構(gòu)和實(shí)例 我們可以看到控制變量i,在隱含中就在不停地增加。順序控制語句 goto,null1.goto 語句goto 語句用于跳轉(zhuǎn)到特定符號去執(zhí)行語句。注意由于使用goto 語句會增加程序的復(fù)雜性,并使得應(yīng)用程序可讀性變差,所以在做一般應(yīng)用開發(fā)時,建議大家不要使用goto 語句?;菊Z法如下 goto lable,其中l(wèi)able 是已經(jīng)定義好的標(biāo)號名,Sql 代碼1. declare2. i int := 1;3. begin4. loop5. dbms_output.put_line(輸出i= | i);6. if
24、 i = 1 then7. goto end_loop;8. end if;9. i := i + 1;10. end loop;11. 12. dbms_output.put_line(循環(huán)結(jié)束);13.end;23PL/SQL 塊的結(jié)構(gòu)和實(shí)例 2.nullnull 語句不會執(zhí)行任何操作,并且會直接將控制傳遞到下一條語句。使用null語句的主要好處是可以提高pl/sql 的可讀性。Sql 代碼1. declare2. v_sal emp.sal%type;3. v_ename emp.ename%type;4. begin5. select ename, sal into v_ename,
25、v_sal from emp where empno =&no;6. if v_sal 3000 then7. update emp set comm = sal * 0.1 where ename = v_ename;8. else9. null;10. end if;11.end;24PL/SQL 塊的結(jié)構(gòu)和實(shí)例 PL/SQL分頁編寫分頁過程介紹分頁是任何一個網(wǎng)站(bbs,網(wǎng)上商城,blog)都會使用到的技術(shù),因此學(xué)習(xí)pl/sql編程開發(fā)就一定要掌握該技術(shù)。無返回值的存儲過程儲過程:案例:現(xiàn)有一張表book,表結(jié)構(gòu)如下:書號 書名 出版社請寫一個過程,可以向book 表添加書,要求通過ja
26、va 程序調(diào)用該過程。-in:表示這是一個輸入?yún)?shù),默認(rèn)為in-out:表示一個輸出參數(shù)Sql 代碼1. create or replace procedure sp_pro7(spBookId in number,spbookName in varchar2,sppublishHouse in varchar2) is2. begin3. insert into book values(spBookId,spbookName,sppublishHouse);4. end;5. /25PL/SQL 塊的結(jié)構(gòu)和實(shí)例 JAVA 代碼try/1.加載驅(qū)動Class.forName(oracle.jd
27、bc.driver.OracleDriver); /2.得到連接Connection ct = DriverManager.getConnection(jdbc:oracle:1521:MYORA1,scott,m123);/3.創(chuàng)建CallableStatementCallableStatement cs = ct.prepareCall(call sp_pro7(?,?,?);/4.給?賦值 cs.setInt(1,10);cs.setString(2,笑傲江湖); cs.setString(3,人民出版社); /5.執(zhí)行cs.execute(); catch(Exception e) e
28、.printStackTrace(); finally/6.關(guān)閉各個打開的資源 cs.close(); ct.close();26PL/SQL 塊的結(jié)構(gòu)和實(shí)例 有返回值的存儲過程(非列表)再看如何處理有返回值的存儲過程:案例:編寫一個過程,可以輸入雇員的編號,返回該雇員的姓名。案例擴(kuò)張:編寫一個過程,可以輸入雇員的編號,返回該雇員的姓名、工資和崗位。Sql 代碼1. -有輸入和輸出的存儲過程2. create or replace procedure sp_pro83. (spno in number, spName out varchar2) is4. begin5. select enam
29、e into spName from emp where empno=spno;6. end;7. /27PL/SQL 塊的結(jié)構(gòu)和實(shí)例 try /1.加載驅(qū)動Class.forName(oracle.jdbc.driver.OracleDriver);/2.得到連接 Connection ct = DriverManager.getConnection(jdbc:oracle:1521:MYORA1,scott,m123); /3.創(chuàng)建CallableStatementCallableStatement cs = ct.prepareCall(call sp_pro7(?,?,?); /4.給
30、?賦值 cs.setInt(1,10); cs.setString(2,笑傲江湖); cs.setString(3,人民出版社);*/ /看看如何調(diào)用有返回值的過程/創(chuàng)建CallableStatement /*CallableStatement cs = ct.prepareCall(call sp_pro8(?,?); /給第一個?賦值cs.setInt(1,7788);/給第二個?賦值 cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); /5.執(zhí)行 cs.execute();/取出返回值,要注意?的順序String nam
31、e=cs.getString(2);System.out.println(7788 的名字+name); catch(Exception e)e.printStackTrace(); finally/6.關(guān)閉各個打開的資源 cs.close(); ct.close(); 28PL/SQL 塊的結(jié)構(gòu)和實(shí)例 案例擴(kuò)張:編寫一個過程,可以輸入雇員的編號,返回該雇員的姓名、工資和崗位。Sql 代碼1. -有輸入和輸出的存儲過程2. create or replace procedure sp_pro83. (spno in number, spName out varchar2,spSal out n
32、umber,spJob outvarchar2) is4. begin5. select ename,sal,job into spName,spSal,spJob from emp whereempno=spno;6. end;7. /29PL/SQL 塊的結(jié)構(gòu)和實(shí)例 try /1.加載驅(qū)動 Class.forName(oracle.jdbc.driver.OracleDriver); /2.得到連接 Connection ct = DriverManager.getConnection(jdbc:oracle:1521:MYORA1,scott,m123);/3.創(chuàng)建CallableSta
33、tement/*CallableStatement cs = ct.prepareCall(call sp_pro7(?,?,?); /4.給?賦值 cs.setInt(1,10);cs.setString(2,笑傲江湖); cs.setString(3,人民出版社);*/ /看看如何調(diào)用有返回值的過程 /創(chuàng)建CallableStatement /*CallableStatement cs = ct.prepareCall(call sp_pro8(?,?,?,?); /給第一個?賦值cs.setInt(1,7788);/給第二個?賦值cs.registerOutParameter(2,ora
34、cle.jdbc.OracleTypes.VARCHAR);/給第三個?賦值 cs.registerOutParameter(3,oracle.jdbc.OracleTypes.DOUBLE); /給第四個?賦值cs.registerOutParameter(4,oracle.jdbc.OracleTypes.VARCHAR); /5.執(zhí)行cs.execute(); /取出返回值,要注意?的順序String name=cs.getString(2); String job=cs.getString(4);System.out.println(7788 的名字+name+ 工作:+job); c
35、atch(Exception e) e.printStackTrace(); finally /6.關(guān)閉各個打開的資源cs.close(); ct.close(); 30PL/SQL 塊的結(jié)構(gòu)和實(shí)例 案例:編寫一個過程,輸入部門號,返回該部門所有雇員信息。對該題分析如下:由于oracle 存儲過程沒有返回值,它的所有返回值都是通過out 參數(shù)來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數(shù),必須要用pagkage 了。所以要分兩部分:返回結(jié)果集的過程1.建立一個包,在該包中,我定義類型test_cursor,是個游標(biāo)。 如下:Sql 代碼1. create or replace
36、package testpackage as2. TYPE test_cursor is ref cursor;3. end testpackage;2.建立存儲過程。如下:Sql 代碼1. create or replace procedure sp_pro9(spNo in number,p_cursor outtestpackage.test_cursor) is2. begin3. open p_cursor for4. select * from emp where deptno = spNo;5. end sp_pro9;31PL/SQL 塊的結(jié)構(gòu)和實(shí)例 1. import jav
37、a.sql.*;2. public class Test23. public static void main(String args)4.5. try6. /1.加載驅(qū)動7. Class.forName(oracle.jdbc.driver.OracleDriver);8. /2.得到連接9. Connection ct = DriverManager.getConnection(jdbc:oracle:1521:MYORA1,scott,m123);10.11. /看看如何調(diào)用有返回值的過程12. /3.創(chuàng)建CallableStatement13. /*CallableStatement
38、cs = ct.prepareCall(call sp_pro9(?,?);14.15. /4.給第?賦值16. cs.setInt(1,10);17. /給第二個?賦值18. cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);19.20. /5.執(zhí)行21. cs.execute();22. /得到結(jié)果集23. ResultSet rs=(ResultSet)cs.getObject(2);24. while(rs.next()25. System.out.println(rs.getInt(1)+ +rs.getString(
39、2);26. 27. catch(Exception e)28. e.printStackTrace();29. finally30. /6.關(guān)閉各個打開的資源31. cs.close();32. ct.close();33. 34. 35.32PL/SQL 塊的結(jié)構(gòu)和實(shí)例 編寫分頁過程有了上面的基礎(chǔ),相信大家可以完成分頁存儲過程了。要求,請大家編寫一個存儲過程,要求可以輸入表名、每頁顯示記錄數(shù)、當(dāng)前頁。返回總記錄數(shù),總頁數(shù),和返回的結(jié)果集。如果大家忘了oracle 中如何分頁,請參考第三天的內(nèi)容。先自己完成,老師在后面給出答案,并講解。-oracle 的分頁Sql 代碼1. select t
40、1.*, rownum rn from (select * from emp) t1 where rownum=10;2. -在分頁時,大家可以把下面的sql 語句當(dāng)做一個模板使用3. select * from4. (select t1.*, rownum rn from (select * from emp) t1 where rownum=6;-開發(fā)一個包-建立一個包,在該包中,我定義類型test_cursor,是個游標(biāo)。 如下:Sql 代碼1. create or replace package testpackage as2. TYPE test_cursor is ref curs
41、or;3. end testpackage;4. -開始編寫分頁的過程5. create or replace procedure fenye6. (tableName in varchar2,7. Pagesize in number,-一頁顯示記錄數(shù)8. pageNow in number,9. myrows out number,-總記錄數(shù)10. myPageCount out number,-總頁數(shù)11. p_cursor out testpackage.test_cursor-返回的記錄集12. ) is13.-定義部分14.-定義sql 語句 字符串15.v_sql varchar
42、2(1000);16.-定義兩個整數(shù)17.v_begin number:=(pageNow-1)*Pagesize+1;18.v_end number:=pageNow*Pagesize;19.begin20.-執(zhí)行部分21.v_sql:=select * from (select t1.*, rownum rn from (select * from |tableName|) t1 where rownum=|v_begin;22.-把游標(biāo)和sql 關(guān)聯(lián)23.open p_cursor for v_sql;24.-計算myrows 和myPageCount25.-組織一個sql 語句26.v_sql:=select count(*) from |tableName;27.-執(zhí)行sql,并把返回的值,賦給myrows;28.execute immediate v_sql into myrows;29.-計算myPageCount30.-if myrows%Pagesize=0 then 這樣寫是錯的31.if mod(myrows,Pagesize)=0 then32. myPageCount:=myrows/Pagesize;33.else34. myPageCount:=myrows/Pagesize+1;35.end if;36.-關(guān)閉游
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國電腦數(shù)字式黑白密度計數(shù)據(jù)監(jiān)測研究報告
- 主題二 任務(wù)二 用圖形美化小報 教學(xué)設(shè)計 -2023-2024學(xué)年桂科版初中信息技術(shù)七年級下冊
- 2025至2030年中國物流管理模擬教學(xué)軟件數(shù)據(jù)監(jiān)測研究報告
- 2025年中國油性橡膠型覆膜膠行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 3 現(xiàn)代詩二首-秋晚的江上(教學(xué)設(shè)計)-2024-2025學(xué)年統(tǒng)編版語文四年級上冊
- 2025年棉卷均勻度機(jī)(含打印機(jī))項(xiàng)目可行性研究報告
- 2025年全自動多葉準(zhǔn)直器項(xiàng)目投資可行性研究分析報告
- 2025至2030年中國空調(diào)省電器數(shù)據(jù)監(jiān)測研究報告
- Unit 1 A new start-Understanding ideas(教學(xué)設(shè)計) 2024-2025學(xué)年外研版(2024)七年級英語上冊
- 2025年雙面黃膠帶項(xiàng)目可行性研究報告
- 地理-廣東省上進(jìn)聯(lián)考領(lǐng)航高中聯(lián)盟2025屆高三下學(xué)期開學(xué)考試題和答案
- GB/T 20032-2024項(xiàng)目風(fēng)險管理應(yīng)用指南
- 博鰲亞洲論壇:創(chuàng)新報告2024
- 2025年全國青少年禁毒知識競賽題庫及答案(401一516) - 副本
- 2025年高三歷史高考第二輪復(fù)習(xí)知識梳理中國史部分復(fù)習(xí)提綱
- 2025年蒙鹽集團(tuán)招聘筆試參考題庫含答案解析
- 精神科醫(yī)療質(zhì)控課件
- 護(hù)理三基三嚴(yán)習(xí)題+參考答案
- 椎間孔鏡的手術(shù)配合
- 員工互評表(含指標(biāo))
- 美國電話區(qū)號一覽表
評論
0/150
提交評論