欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)

      時(shí)間:2019-05-12 23:13:07下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)》。

      第一篇:mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)

      mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)

      一.創(chuàng)建存儲(chǔ)過(guò)程 1.基本語(yǔ)法:

      create procedure sp_name()begin end 2.參數(shù)傳遞

      二.調(diào)用存儲(chǔ)過(guò)程

      1.基本語(yǔ)法:call sp_name()注意:存儲(chǔ)過(guò)程名稱后面必須加括號(hào),哪怕該存儲(chǔ)過(guò)程沒(méi)有參數(shù)傳遞

      三.刪除存儲(chǔ)過(guò)程 1.基本語(yǔ)法:

      drop procedure sp_name// 2.注意事項(xiàng)

      (1)不能在一個(gè)存儲(chǔ)過(guò)程中刪除另一個(gè)存儲(chǔ)過(guò)程,只能調(diào)用另一個(gè)存儲(chǔ)過(guò)程

      四.區(qū)塊,條件,循環(huán) 1.區(qū)塊定義,常用 begin end;也可以給區(qū)塊起別名,如: lable:begin end lable;可以用leave lable;跳出區(qū)塊,執(zhí)行區(qū)塊以后的代碼

      2.條件語(yǔ)句 3.循環(huán)語(yǔ)句 :while循環(huán) loop循環(huán) repeat until循環(huán) repeat until循環(huán)

      五.其他常用命令

      1.show procedure status 顯示數(shù)據(jù)庫(kù)中所有存儲(chǔ)的存儲(chǔ)過(guò)程基本信息,包括所屬數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程名稱,創(chuàng)建時(shí)間等 2.show create procedure sp_name 顯示某一個(gè)存儲(chǔ)過(guò)程的詳細(xì)信息

      mysql存儲(chǔ)過(guò)程基本函數(shù)

      一.字符串類(lèi)

      CHARSET(str)//返回字串字符集 CONCAT(string2 [,...])//連接字串

      INSTR(string ,substring)//返回substring首次在string中出現(xiàn)的位置,不存在返回0 LCASE(string2)//轉(zhuǎn)換成小寫(xiě)

      LEFT(string2 ,length)//從string2中的左邊起取length個(gè)字符 LENGTH(string)//string長(zhǎng)度

      一起推論壇

      一起推論壇004km.cn

      第二篇:課題:SQLServer存儲(chǔ)過(guò)程返回值總結(jié)

      SQLServer存儲(chǔ)過(guò)程返回值總結(jié)

      1.存儲(chǔ)過(guò)程沒(méi)有返回值的情況(即存儲(chǔ)過(guò)程語(yǔ)句中沒(méi)有return之類(lèi)的語(yǔ)句)

      用方法 int count = ExecuteNonQuery(..)執(zhí)行存儲(chǔ)過(guò)程其返回值只有兩種情況

      (1)假如通過(guò)查詢分析器執(zhí)行該存儲(chǔ)過(guò)程,在顯示欄中假如有影響的行數(shù),則影響幾行count就是幾

      (2)假如通過(guò)查詢分析器執(zhí)行該存儲(chǔ)過(guò)程,在顯示欄中假如顯示'命令已成功完成。'則count =-1;在顯示欄中假如有查詢結(jié)果,則count =-1

      總結(jié):A.ExecuteNonQuery()該方法只返回影響的行數(shù),假如沒(méi)有影響行數(shù),則該方法的返回值只能是-1,不會(huì)為0。

      B.不論ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text執(zhí)行,其效果和A一樣。

      2.獲得存儲(chǔ)過(guò)程的返回值--通過(guò)查詢分析器獲得

      (1)不帶任何參數(shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程語(yǔ)句中含有return)

      ---創(chuàng)建存儲(chǔ)過(guò)程

      CREATE PROCEDURE testReturn

      AS

      return 145

      GO

      ---執(zhí)行存儲(chǔ)過(guò)程

      DECLARE @RC int

      exec @RC=testReturn

      select @RC

      ---說(shuō)明

      查詢結(jié)果為145

      (2)帶輸入?yún)?shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程語(yǔ)句中含有return)

      ---創(chuàng)建存儲(chǔ)過(guò)程

      create procedure sp_add_table1

      @in_name varchar(100), @in_addr varchar(100), @in_tel varchar(100)

      as

      if(@in_name = '' or @in_name is null)

      return 1

      else

      begin

      insert into table1(name,addr,tel)values(@in_name,@in_addr,@in_tel)

      return 0

      end

      ---執(zhí)行存儲(chǔ)過(guò)程

      <1>執(zhí)行下列,返回1

      declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count

      <2>執(zhí)行下列,返回0

      declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count

      ---說(shuō)明

      查詢結(jié)果不是0就是1

      (3)帶輸出參數(shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程中可以有return可以沒(méi)有return)

      例子A:

      ---創(chuàng)建存儲(chǔ)過(guò)程

      create procedure sp_output

      @output int output

      as

      set @output = 121

      return 1

      ---執(zhí)行存儲(chǔ)過(guò)程

      <1>執(zhí)行下列,返回121

      declare @out int

      exec sp_output @out output

      select @out

      <2>執(zhí)行下列,返回1

      declare @out int

      declare @count int exec @count = sp_output @out output

      select @count

      ---說(shuō)明

      有return,只要查詢輸出參數(shù),則查詢結(jié)果為輸出參數(shù)在存儲(chǔ)過(guò)程中最后變成的值;只要不查詢輸出參數(shù),則查詢結(jié)果為return返回的值

      例子B:

      ---創(chuàng)建存儲(chǔ)過(guò)程

      create procedure sp_output

      @output int output

      as

      set @output = 121

      ---執(zhí)行存儲(chǔ)過(guò)程

      <1>執(zhí)行下列,返回121

      declare @out int

      exec sp_output @out output

      select @out

      <2>執(zhí)行下列,返回0

      declare @out int

      declare @count int

      exec @count = sp_output @out output

      select @count

      ---說(shuō)明

      沒(méi)有return,只要查詢輸出參數(shù),則查詢結(jié)果為輸出參數(shù)在存儲(chǔ)過(guò)程中最后變成的值;只要不查詢輸出參數(shù),則查詢結(jié)果為0

      總結(jié):

      (1)存儲(chǔ)過(guò)程共分為3類(lèi):

      A.返回記錄集的存儲(chǔ)過(guò)程---------------------------其執(zhí)行結(jié)果是一個(gè)記錄集,例如:從數(shù)據(jù)庫(kù)中檢索出符合某一個(gè)或幾個(gè)條件的記錄

      B.返回?cái)?shù)值的存儲(chǔ)過(guò)程(也可以稱為標(biāo)量存儲(chǔ)過(guò)程)-----其執(zhí)行完以后返回一個(gè)值,例如:在數(shù)據(jù)庫(kù)中執(zhí)行一個(gè)有返回值的函數(shù)或命令

      C.行為存儲(chǔ)過(guò)程----用來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的某個(gè)功能,而沒(méi)有返回值,例如:在數(shù)據(jù)庫(kù)中的更新和刪除操作

      (2)含有return的存儲(chǔ)過(guò)程其返回值為return返回的那個(gè)值

      (3)沒(méi)有return的存儲(chǔ)過(guò)程,不論執(zhí)行結(jié)果有無(wú)記錄集,其返回值是0

      (4)帶輸出參數(shù)的存儲(chǔ)過(guò)程:假如有return則返回return返回的那個(gè)值,假如要select輸出參數(shù),則出現(xiàn)輸出參數(shù)的值,于有無(wú)return無(wú)關(guān)

      --------------------3.獲得存儲(chǔ)過(guò)程的返回值--通過(guò)程序獲得

      ---------------------------SqlParameter[] cmdParms = {..,new SqlParameter(“@return”,SqlDbType.Int)};cmdParms[cmdParms.Length1].Direction = ParameterDirection.Output或者 cmdParms[cmdParms.Length1].Value;

      分類(lèi): asp.net

      第三篇:存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)個(gè)人總結(jié)

      優(yōu)點(diǎn)

      1.在生產(chǎn)環(huán)境下,可以通過(guò)直接修改存儲(chǔ)過(guò)程的方式修改業(yè)務(wù)邏輯(或bug),而不用重啟服務(wù)器。但這一點(diǎn)便利被許多人濫用了。有人直接就在正式服務(wù)器上修改存儲(chǔ)過(guò)程,而沒(méi)有經(jīng)過(guò)完整的測(cè)試,后果非常嚴(yán)重。

      2.執(zhí)行速度快。存儲(chǔ)過(guò)程經(jīng)過(guò)編譯之后會(huì)比單獨(dú)一條一條執(zhí)行要快。但這個(gè)效率真是沒(méi)太大影響。如果是要做大數(shù)據(jù)量的導(dǎo)入、同步,我們可以用其它手段。

      3.減少網(wǎng)絡(luò)傳輸。存儲(chǔ)過(guò)程直接就在數(shù)據(jù)庫(kù)服務(wù)器上跑,所有的數(shù)據(jù)訪問(wèn)都在服務(wù)器內(nèi)部進(jìn)行,不需要傳輸數(shù)據(jù)到其它終端。但我們的應(yīng)付服務(wù)器通常與數(shù)據(jù)庫(kù)是在同一內(nèi)網(wǎng),大數(shù)據(jù)的訪問(wèn)的瓶頸會(huì)是硬盤(pán)的速度,而不是網(wǎng)速。

      4.能夠解決presentation與數(shù)據(jù)之間的差異,說(shuō)得文藝青年點(diǎn)就是解決OO模型與二維數(shù)據(jù)持久化之間的阻抗。領(lǐng)域模型和數(shù)據(jù)模型的設(shè)計(jì)可能不是同一個(gè)人(一個(gè)是SA,另一個(gè)是DBA),兩者的分歧可能會(huì)很大——這不奇怪,一個(gè)是以O(shè)O的思想來(lái)設(shè)計(jì),一個(gè)是結(jié)構(gòu)化的數(shù)據(jù)來(lái)設(shè)計(jì),大家互不妥協(xié)——你說(shuō)為了軟件的彈性必須這么設(shè)計(jì),他說(shuō)為了效率必須那樣設(shè)計(jì),為了抹平鴻溝,就用存儲(chǔ)過(guò)程來(lái)做數(shù)據(jù)存儲(chǔ)的邏輯映射(把屬性映射到字段)。好吧,臺(tái)下已經(jīng)有同學(xué)在叨咕ORM了。

      5.方便DBA優(yōu)化。所有的SQL集中在一個(gè)地方,DBA會(huì)很高興。這一點(diǎn)算是ORM的軟肋。不過(guò)按照CQRS框架的思想,查詢是用存儲(chǔ)過(guò)程還是ORM,還真不是問(wèn)題——DBA對(duì)數(shù)據(jù)庫(kù)的優(yōu)化,ORM一樣會(huì)受益。況且放在ORM中還能用二級(jí)緩存,有些時(shí)候效率還會(huì)更高。

      缺點(diǎn)

      1.SQL本身是一種結(jié)構(gòu)化查詢語(yǔ)言,加上了一些控制(賦值、循環(huán)和異常處理等),但不是OO的,本質(zhì)上還是過(guò)程化的,面對(duì)復(fù)雜的業(yè)務(wù)邏輯,過(guò)程化的處理會(huì)很吃力。這一點(diǎn)算致命傷。

      2.不便于調(diào)試?;旧蠜](méi)有較好的調(diào)試器,很多時(shí)候是用print來(lái)調(diào)試,但用這種方法調(diào)試長(zhǎng)達(dá)數(shù)百行的存儲(chǔ)過(guò)程簡(jiǎn)直是噩夢(mèng)。好吧,這一點(diǎn)不算啥,C#/java一樣能寫(xiě)出噩夢(mèng)般的代碼。

      3.沒(méi)辦法應(yīng)用緩存。雖然有全局臨時(shí)表之類(lèi)的方法可以做緩存,但同樣加重了數(shù)據(jù)庫(kù)的負(fù)擔(dān)。如果緩存并發(fā)嚴(yán)重,經(jīng)常要加鎖,那效率實(shí)在堪憂。

      4.無(wú)法適應(yīng)數(shù)據(jù)庫(kù)的切割(水平或垂直切割)。數(shù)據(jù)庫(kù)切割之后,存儲(chǔ)過(guò)程并不清楚數(shù)據(jù)存儲(chǔ)在哪個(gè)數(shù)據(jù)庫(kù)中。

      5.精通SQL的新手越來(lái)越少——不要笑,這是真的,我面試過(guò)N多新人,都不知道如何創(chuàng)建全局臨時(shí)表、不知道having、不知道聚集索引和非聚集索引,更別提游標(biāo)和提交叉表查詢了。好吧,這個(gè)缺點(diǎn)算是湊數(shù)用的,作為屌絲程序員,我們的口號(hào)是:沒(méi)有不會(huì)的,只有不用的。除了少數(shù)有語(yǔ)言潔癖的人,我相信精通SQL只是時(shí)間問(wèn)題。

      總結(jié)

      存儲(chǔ)過(guò)程最大的優(yōu)點(diǎn)是部署的方便性——可以在生產(chǎn)環(huán)境下直接修改——雖然濫用的后果很?chē)?yán)重。

      存儲(chǔ)過(guò)程最大的缺點(diǎn)是SQL語(yǔ)言本身的局限性——我們不應(yīng)該用存儲(chǔ)過(guò)程處理復(fù)雜的業(yè)務(wù)邏輯——讓SQL回歸它“結(jié)構(gòu)化查詢語(yǔ)言”的功用吧。

      第四篇:用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)

      用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)

      分類(lèi): PL/SQL系列 2009-09-24 15:08 253人閱讀 評(píng)論(0)收藏 舉報(bào)

      聲明:

      以下的例子不一定正確,只是為了演示大概的流程。

      一:無(wú)返回值的存儲(chǔ)過(guò)程 存儲(chǔ)過(guò)程為:

      CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)AS BEGIN

      INSERT INTO HYQ.B_ID(I_ID,I_NAME)VALUES(PARA1, PARA2);END TESTA;

      然后呢,在java里調(diào)用時(shí)就用下面的代碼: package com.hyq.src;

      import java.sql.*;import java.sql.ResultSet;

      public class TestProcedureOne {

      public TestProcedureOne(){

      }

      public static void main(String[] args){

      String driver = “oracle.jdbc.driver.OracleDriver”;

      String strUrl = “jdbc:oracle:thin:@127.0.0.1:1521: hyq ”;

      Statement stmt = null;

      ResultSet rs = null;

      Connection conn = null;

      CallableStatement cstmt = null;

      try {

      Class.forName(driver);

      conn = DriverManager.getConnection(strUrl, “ hyq ”, “ hyq ”);

      CallableStatement proc = null;

      proc = conn.prepareCall(“{ call HYQ.TESTA(?,?)}”);

      proc.setString(1, “100”);

      proc.setString(2, “TestOne”);

      proc.execute();

      }

      catch(SQLException ex2){

      ex2.printStackTrace();

      }

      catch(Exception ex2){

      ex2.printStackTrace();

      }

      finally{

      try {

      if(rs!= null){

      rs.close();

      if(stmt!=null){

      stmt.close();

      }

      if(conn!=null){

      conn.close();

      }

      }

      }

      catch(SQLException ex1){

      }

      }

      } }

      二:有返回值的存儲(chǔ)過(guò)程(非列表)

      當(dāng)然了,這就先要求要建張表TESTTB,里面兩個(gè)字段(I_ID,I_NAME)。

      存儲(chǔ)過(guò)程為: CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)AS BEGIN

      SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;END TESTB;

      在java里調(diào)用時(shí)就用下面的代碼: package com.hyq.src;

      public class TestProcedureTWO {

      public TestProcedureTWO(){

      }

      public static void main(String[] args){

      String driver = “oracle.jdbc.driver.OracleDriver”;

      String strUrl = “jdbc:oracle:thin:@127.0.0.1:1521:hyq”;

      Statement stmt = null;

      ResultSet rs = null;

      Connection conn = null;

      try {

      Class.forName(driver);

      conn = DriverManager.getConnection(strUrl, “ hyq ”, “ hyq ”);

      CallableStatement proc = null;

      proc = conn.prepareCall(“{ call HYQ.TESTB(?,?)}”);

      proc.setString(1, “100”);

      proc.registerOutParameter(2, Types.VARCHAR);

      proc.execute();

      String testPrint = proc.getString(2);

      System.out.println(“=testPrint=is=”+testPrint);

      }

      catch(SQLException ex2){

      ex2.printStackTrace();

      }

      catch(Exception ex2){

      ex2.printStackTrace();

      }

      finally{

      try {

      if(rs!= null){

      rs.close();

      if(stmt!=null){

      stmt.close();

      }

      if(conn!=null){

      conn.close();

      }

      }

      }

      catch(SQLException ex1){

      }

      }

      } }

      }

      注意,這里的proc.getString(2)中的數(shù)值2并非任意的,而是和存儲(chǔ)過(guò)程中的out列對(duì)應(yīng)的,如果out是在第一個(gè)位置,那就是proc.getString(1),如果是第三個(gè)位置,就是proc.getString(3),當(dāng)然也可以同時(shí)有多個(gè)返回值,那就是再多加幾個(gè)out參數(shù)了。

      三:返回列表

      由于oracle存儲(chǔ)過(guò)程沒(méi)有返回值,它的所有返回值都是通過(guò)out參數(shù)來(lái)替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數(shù),必須要用pagkage了.所以要分兩部分,1,建一個(gè)程序包。如下:

      CREATE OR REPLACE PACKAGE TESTPACKAGE AS

      TYPE Test_CURSOR IS REF CURSOR;end TESTPACKAGE;

      2,建立存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程為:

      CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR)IS BEGIN

      OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;END TESTC;

      可以看到,它是把游標(biāo)(可以理解為一個(gè)指針),作為一個(gè)out 參數(shù)來(lái)返回值的。在java里調(diào)用時(shí)就用下面的代碼: package com.hyq.src;import java.sql.*;

      import java.io.OutputStream;import java.io.Writer;

      import java.sql.PreparedStatement;import java.sql.ResultSet;import oracle.jdbc.driver.*;

      public class TestProcedureTHREE {

      public TestProcedureTHREE(){

      }

      public static void main(String[] args){

      String driver = “oracle.jdbc.driver.OracleDriver”;

      String strUrl = “jdbc:oracle:thin:@127.0.0.1:1521:hyq”;

      Statement stmt = null;

      ResultSet rs = null;

      Connection conn = null;

      try {

      Class.forName(driver);

      conn = DriverManager.getConnection(strUrl, “hyq”, “hyq”);

      CallableStatement proc = null;

      proc = conn.prepareCall(“{ call hyq.testc(?)}”);

      proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

      proc.execute();

      rs =(ResultSet)proc.getObject(1);

      while(rs.next())

      {

      System.out.println(“” + rs.getString(1)+ “”+rs.getString(2)+“”);

      }

      }

      catch(SQLException ex2){

      ex2.printStackTrace();

      }

      catch(Exception ex2){

      ex2.printStackTrace();

      }

      finally{

      try {

      if(rs!= null){

      rs.close();

      if(stmt!=null){

      stmt.close();

      }

      if(conn!=null){

      conn.close();

      }

      }

      }

      catch(SQLException ex1){

      }

      }

      } }

      四。Hibernate調(diào)用存儲(chǔ)過(guò)程

      Connection con = session.connect();

      CallableStatement proc = null;

      con = connectionPool.getConnection();

      proc = con.prepareCall(“{ call set_death_age(?, ?)}”);proc.setString(1, XXX);

      proc.setInt(2, XXx);...proc.execute();

      session.close();

      在Hibernate中調(diào)用存儲(chǔ)過(guò)程的示范代碼--

      如果底層數(shù)據(jù)庫(kù)(如Oracle)支持存儲(chǔ)過(guò)程,也可以通過(guò)存儲(chǔ)過(guò)程來(lái)執(zhí)行批量更新。存儲(chǔ)過(guò)程直接在數(shù)據(jù)庫(kù)中運(yùn)行,速度更加快。在Oracle數(shù)據(jù)庫(kù)中可以定義一個(gè)名為batchUpdateStudent()的存儲(chǔ)過(guò)程,代碼如下:

      create or replace procedure batchUpdateStudent(p_age in number)as begin update STUDENT set AGE=AGE+1 where AGE>p_age;end;以上存儲(chǔ)過(guò)程有一個(gè)參數(shù)p_age,代表學(xué)生的年齡,應(yīng)用程序可按照以下方式調(diào)用存儲(chǔ)過(guò)程: tx = session.beginTransaction();Connection con=session.connection();String procedure = “{call batchUpdateStudent(?)}”;CallableStatement cstmt = con.prepareCall(procedure);cstmt.setInt(1,0);//把年齡參數(shù)設(shè)為0 cstmt.executeUpdate();tx.commit();在以上代碼中,我用的是Hibernate的 Transaction接口來(lái)聲明事務(wù),而不是采用JDBC API來(lái)聲明事務(wù)。

      存儲(chǔ)過(guò)程中有一個(gè)參數(shù)p_age,代表客戶的年齡,應(yīng)用程序可按照以下方式調(diào)用存儲(chǔ)過(guò)程:

      代碼內(nèi)容

      tx = session.beginTransaction();Connection con=session.connection();

      String procedure = “{call batchUpdateCustomer(?)}”;

      CallableStatement cstmt = con.prepareCall(procedure);

      cstmt.setInt(1,0);//把年齡參數(shù)設(shè)為0

      cstmt.executeUpdate();

      tx.commit();

      CREATE procedure selectAllUsers DYNAMIC RESULT SETS 1 BEGIN

      DECLARE temp_cursor1 CURSOR WITH RETURN TO CLIENT FOR

      SELECT * FROM test;

      OPEN temp_cursor1;END;

      映射文件中關(guān)于存儲(chǔ)過(guò)程內(nèi)容如下

      ............

      { ? = call selectAllUsers()}

      { ? = call selectAllUsers()} 也可以寫(xiě)成{ call selectAllUsers()},如果有參數(shù)就寫(xiě)成

      { ? = call selectAllUsers(?,?,?)}

      代碼中對(duì)query設(shè)置相應(yīng)位置上的值就OK Java調(diào)用關(guān)鍵代碼如下

      Session session = HibernateUtil.currentSession();

      Query query = session.getNamedQuery(“selectAllUsers”);

      List list = query.list();

      System.out.println(list);

      要求你的存儲(chǔ)過(guò)程必須能返回記錄集,否則要出錯(cuò)

      如果你的存儲(chǔ)過(guò)程是完成非查詢?nèi)蝿?wù)就應(yīng)該在配置文件用以下三個(gè)標(biāo)簽

      {call createPerson(?, ?)}

      {? = call deletePerson(?)}

      {? = call updatePerson(?, ?)} 有一點(diǎn)不好的地方就是調(diào)用存儲(chǔ)過(guò)程獲取記錄集時(shí),不能對(duì)Query使用

      setFirstResult(int)和setMaxResults(int)方法來(lái)分頁(yè)

      第五篇:教學(xué):數(shù)據(jù)庫(kù)-存儲(chǔ)過(guò)程資料

      教學(xué)三:存儲(chǔ)過(guò)程

      一、教學(xué)目的

      (1)掌握T-SQL流控制語(yǔ)句;(2)掌握創(chuàng)建存儲(chǔ)過(guò)程的方法;(3)掌握存儲(chǔ)過(guò)程的執(zhí)行方法;(4)掌握存儲(chǔ)過(guò)程的管理和維護(hù)。

      二、教學(xué)內(nèi)容

      1、創(chuàng)建簡(jiǎn)單存儲(chǔ)過(guò)程

      (1)創(chuàng)建一個(gè)名為stu_pr的存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程能查詢出051班學(xué)生的所有資料,包括學(xué)生的基本信息、學(xué)生的選課信息(含未選課同學(xué)的信息)。要求在創(chuàng)建存儲(chǔ)過(guò)程前請(qǐng)判斷該存儲(chǔ)過(guò)程是否已創(chuàng)建,若已創(chuàng)建則先刪除,并給出“已刪除!”信息,否則就給出“不存在,可創(chuàng)建!”的信息。

      if exists(select name from sysobjects where name='stu_pr'and type='p')begin print '已刪除!' drop procedure stu_pr end else print '不存在,可創(chuàng)建!' go create procedure stu_pr as select * from Student_20103322 left outer join SC_20103322

      on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where classno='051' 1

      exec stu_pr

      2、創(chuàng)建帶參數(shù)的存儲(chǔ)過(guò)程

      (1)創(chuàng)建一個(gè)名為stu_proc1的存儲(chǔ)過(guò)程,查詢某系、某姓名的學(xué)生的學(xué)號(hào)、姓名、年齡,選修課程名、成績(jī)。系名和姓名在調(diào)用該存儲(chǔ)過(guò)程時(shí)輸入,其默認(rèn)值分別為“%”與“林%”。執(zhí)行該存儲(chǔ)過(guò)程,用多種參數(shù)加以測(cè)試。

      if exists(select name from sysobjects where name='stu_proc1' and type='p')begin

      print '已刪除!' drop procedure stu_proc1 end else

      print '不存在,可創(chuàng)建!' go create procedure stu_proc1 @Sdept char(8)='%',@Sname varchar(8)='林%' as select Sdept,Student_20103322.Sno,Sname,DATEDIFF(YEAR,Birth,GETDATE())age,Cname,Grade from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Sdept like @Sdept and Sname like @Sname

      execute stu_proc1 '計(jì)算機(jī)系','林紅' 3

      execute stu_proc1 '信息安全','胡光璟'

      (2)創(chuàng)建一個(gè)名為Student_sc的存儲(chǔ)過(guò)程,可查詢出某段學(xué)號(hào)的同學(xué)的學(xué)號(hào)、姓名、總成績(jī)。(學(xué)號(hào)起始號(hào)與終止號(hào)在調(diào)用時(shí)輸入,可設(shè)默認(rèn)值)。執(zhí)行該存儲(chǔ)過(guò)程。if exists(select name from sysobjects where name='Student_sc'and type='p')begin print '已刪除!' drop procedure student_sc end else print '不存在,可創(chuàng)建!' go create procedure Student_sc @Sno1 char(8),@Sno2 char(8)as select Student_20103322.Sno,Sname,SUM(Grade)總成績(jī) from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Student_20103322.Sno>=@Sno1 and Student_20103322.Sno<=@Sno2 group by Student_20103322.Sno,Sname

      execute Student_sc '20110000','20110003' 5

      3、創(chuàng)建帶輸出參數(shù)的存儲(chǔ)過(guò)程

      (1)創(chuàng)建一個(gè)名為Course_sum的存儲(chǔ)過(guò)程,可查詢某門(mén)課程考試的總成績(jī)??偝煽?jī)可以輸出,以便進(jìn)一步調(diào)用。

      if exists(select name from sysobjects where name='Course_sum'and type='p')begin print '已刪除!' drop procedure Course_sum end else print '不存在,可創(chuàng)建!' go create procedure Course_sum @Cname varchar(20),@sum int output as select @sum=sum(Grade)from SC_20103322,Course_20103322 where Course_20103322.Cno=SC_20103322.Cno and Cname=@Cname

      group by SC_20103322.Cno,Cname

      declare @ping int exec Course_sum '高數(shù)',@ping output print '高數(shù)的考試總成績(jī)?yōu)椋?+cast(@ping as varchar(20))

      (2)創(chuàng)建一執(zhí)行該存儲(chǔ)過(guò)程的批處理,要求當(dāng)總成績(jī)小于100時(shí),顯示信息為:“XX課程的總成績(jī)?yōu)椋篨X,其總分未達(dá)100分”。超過(guò)100時(shí),顯示信息為:“XX課程的總成績(jī)?yōu)椋篨X”。

      declare @sum int

      declare @Cname varchar(20)Exec Course_sum @cname,@sum out begin

      if @sum <100 print cast(@cname as varchar)+'課程的總成績(jī)?yōu)?'+cast(@sum as varchar)+ ',其總分未達(dá)分'

      else

      print cast(@cname as varchar)+'課程的總成績(jī)?yōu)?'+cast(@sum as varchar)end

      declare @sum int

      declare @Cname varchar(20)set @Cname='高數(shù)' Exec Course_sum @cname,@sum out begin

      if @sum <100 print cast(@cname as varchar)+'課程的總成績(jī)?yōu)?'+cast(@sum as varchar)+ ',其總分未達(dá)分'

      else

      print cast(@cname as varchar)+'課程的總成績(jī)?yōu)?'+cast(@sum as varchar)end

      4、創(chuàng)建帶重編譯及加密選項(xiàng)的存儲(chǔ)過(guò)程

      創(chuàng)建一個(gè)名為update_sc、并帶重編譯及加密選項(xiàng)的存儲(chǔ)過(guò)程,可更新指定學(xué)號(hào)、指定課程號(hào)的學(xué)生的課程成績(jī)。(學(xué)號(hào)、課程號(hào)由調(diào)用時(shí)輸入)

      if exists(select name from sysobjects where name='update_sc'and type='p')begin print '已刪除!' drop procedure update_sc end else print '不存在,可創(chuàng)建!' go create procedure update_sc

      @sno char(8),@cno char(3),@grade tinyint with RECOMPILE , ENCRYPTION as update SC_20103322 set Grade=@grade

      where Sno=@sno and Cno=@cno

      declare @sno char(8),@cno char(3),@grade tinyint set @sno='20103322' set @cno='003' set @grade='100' exec update_sc @sno,@cno,@grade begin print cast(@sno as varchar)+'的'+cast(@cno as varchar)+'課程成績(jī)?yōu)椋?+cast(@grade as varchar)end

      5、使用T-SQL語(yǔ)句管理和維護(hù)存儲(chǔ)過(guò)程

      (1)使用sp_helptext查看存儲(chǔ)過(guò)程Student_sc的定義腳本

      exec sp_helptext student_sc

      (2)使用select語(yǔ)句查看Student_sc存儲(chǔ)過(guò)程的定義腳本(提示:通過(guò)查詢表sysobjects和表syscomments)

      select *

      from sysobjects,syscomments where name = 'Student_sc'

      (3)將存儲(chǔ)過(guò)程stu_pr改為查詢學(xué)號(hào)為2011001的學(xué)生的詳細(xì)資料。

      alter procedure stu_pr as select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001'

      (4)刪除存儲(chǔ)過(guò)程stu_pr。

      drop procedure stu_pr

      6、使用SQL Server Management Studio管理存儲(chǔ)過(guò)程

      (1)在SQL Server Management Studio中重新創(chuàng)建剛刪除的存儲(chǔ)過(guò)程stu_pr create procedure stu_pr as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' end

      (2)查看存儲(chǔ)過(guò)程stu_pr,并將該過(guò)程修改為查詢051班女生的所有資料。

      ALTER procedure [dbo].[stu_pr] as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' and Sex='女' end

      (3)刪除存儲(chǔ)過(guò)程stu_pr

      【完】

      下載mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié)word格式文檔
      下載mysql 5.0存儲(chǔ)過(guò)程學(xué)習(xí)總結(jié).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        網(wǎng)絡(luò)數(shù)據(jù)庫(kù)講稿(存儲(chǔ)過(guò)程)5篇

        網(wǎng)絡(luò)數(shù)據(jù)庫(kù)講稿4/15/2013 存儲(chǔ)過(guò)程P177 一、什么是存儲(chǔ)過(guò)程 1.是一個(gè)過(guò)程,與其它語(yǔ)言中的過(guò)程幾乎完全相同。它們可以接收參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。......

        網(wǎng)絡(luò)技術(shù)學(xué)習(xí)過(guò)程總結(jié)

        網(wǎng)絡(luò)技術(shù)學(xué)習(xí)過(guò)程總結(jié)自從上課以來(lái),我對(duì)網(wǎng)絡(luò)技術(shù)的了解又大大提高,首先還是要謝謝老師的教導(dǎo),給與我更多的知識(shí),下面我想談?wù)勎覍?duì)這門(mén)課的一些體會(huì)。隨著社會(huì)各方面的發(fā)展,計(jì)算機(jī)......

        總結(jié)H3CNE學(xué)習(xí)過(guò)程

        還有其他比方說(shuō):這窮山溝快遞四通一達(dá)要加收5元還不給送到家,最可恨的是我們的五險(xiǎn)一金只能在萊鋼自管范圍內(nèi)使用,你說(shuō)這不是扯淡嘛,我公積金倒是不低,賬戶月存入1000元,可是根本......

        [轉(zhuǎn)載]grails調(diào)用存儲(chǔ)過(guò)程(Grails: calling a stored procedure)(范文模版)

        [轉(zhuǎn)載]grails調(diào)用存儲(chǔ)過(guò)程(Grails : calling a stored procedure)在特殊情況下,grails應(yīng)用需要調(diào)用數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程,這在grails的官方文檔里邊好像沒(méi)有提到過(guò),在james的blog里介......

        學(xué)習(xí)過(guò)程

        (一)注重基礎(chǔ)知識(shí),細(xì)化考察體系 本套試題考查面廣,涉及知識(shí)點(diǎn)多,突出了教學(xué)重點(diǎn),題量適中,難易程度適中。符合兒童心理,其中對(duì)知識(shí)的正確理解是本次考察的重點(diǎn)。 (二)題型設(shè)計(jì)新穎,試題......

        linux學(xué)習(xí)過(guò)程總結(jié)v1.0

        從零開(kāi)始學(xué)習(xí)使用linux1. 安裝linux 安裝linux之前我們必須先了解一下基礎(chǔ)知識(shí),通讀一遍“基礎(chǔ)知識(shí).rar”內(nèi)的資料即可。開(kāi)始學(xué)習(xí)linux階段可以使用Vmware 虛擬機(jī)來(lái)安裝一個(gè)......

        學(xué)習(xí)雷鋒總結(jié)過(guò)程性

        學(xué)習(xí)雷鋒活動(dòng)月——向雷鋒同志學(xué)習(xí)過(guò)程性材料及總結(jié) 時(shí)間:2012-3-15 地點(diǎn):外語(yǔ)樓511教室 成員:xx xxx xxx xxx xxxxx1963年3月5日,偉大領(lǐng)袖毛澤東題詞——“向雷鋒同志學(xué)習(xí)”,并......

        學(xué)習(xí)張麗莉過(guò)程及總結(jié)(合集)

        通南鎮(zhèn)中心學(xué)校 學(xué)習(xí)“張麗莉老師事跡”活動(dòng)過(guò)程及總結(jié) 我校認(rèn)真貫徹響應(yīng)上級(jí)的號(hào)召,積極組織全體師生對(duì)張麗莉老師的先進(jìn)事跡進(jìn)行學(xué)習(xí)。學(xué)校高度重視這次學(xué)習(xí)活動(dòng),精心組織,加......