<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.tkk7.com/sxyx2008/謝謝合作!!!

    雪山飛鵠

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.tkk7.com/sxyx2008/謝謝合作!!!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
     

    此文檔中除MySQL 存儲過程參數類型(inoutinout小節來自網上,其余均為本人原創,歡迎大家轉載,如有不足,請指教。
    由于是在word中編輯好拷貝過來的所以字體較小大家點此下載電子版文檔

      

    MySQL存儲過程

    1.1         CREATE  PROCEDURE  (創建)

    CREATE PROCEDURE存儲過程名 (參數列表)
       BEGIN
             SQL語句代碼塊
    END
    注意:
    由括號包圍的參數列必須總是存在。如果沒有參數,也該使用一個空參數列()。每個參數默認都是一個IN參數。要指定為其它參數,可在參數名之前使用關鍵詞 OUT或INOUT
    mysql客戶端定義存儲過程的時候使用delimiter命令來把語句定界符從;變為//。
    當使用delimiter命令時,你應該避免使用反斜杠(‘"’)字符,因為那是MySQL的轉義字符。
    如:
    mysql> delimiter //
    mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
        -> BEGIN
        ->   SELECT COUNT(*) INTO param1 FROM t;
        -> END
        -> //
    Query OK, 0 rows affected (0.00 sec)

    1.2         ALTER  PROCEDURE (修改)

    ALTER PROCEDURE 存儲過程名SQL語句代碼塊
    這個語句可以被用來改變一個存儲程序的特征。

    1.3         DROP  PROCEDURE (刪除)

    DROP PROCEDURE  IF  EXISTS存儲過程名

    eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee 存儲過程名)

    這個語句被用來移除一個存儲程序。不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程

    1.4         SHOW  CREATE  PROCEDURE(類似于SHOW CREATE TABLE,查看一個已存在的存儲過程)

    SHOW CREATE PROCEDURE 存儲過程名

    1.5         SHOW  PROCEDURE  STATUS (列出所有的存儲過程)

    SHOW  PROCEDURE  STATUS

    1.6         CALL語句(存儲過程的調用)

    CALL 存儲過程名(參數列表)

    CALL語句調用一個先前用CREATE PROCEDURE創建的程序。
    CALL語句可以用聲明為OUT或的INOUT參數的參數給它的調用者傳回值。
    存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞

    1.7         BEGIN ... END(復合語句)

    [begin_label:] 
    BEGIN
        [statement_list]
    END 
    [end_label]

    存儲子程序可以使用BEGIN ... END復合語句來包含多個語句。

    statement_list 代表一個或多個語句的列表。statement_list之內每個語句都必須用分號(;)來結尾。

    復合語句可以被標記。除非begin_label存在,否則end_label不能被給出,并且如果二者都存在,他們必須是同樣的。

    1.8         DECLARE語句(用來聲明局部變量)

    DECLARE語句被用來把不同項目局域到一個子程序:局部變量

    DECLARE僅被用在BEGIN ... END復合語句里,并且必須在復合語句的開頭,在任何其它語句之前。

    1.9         存儲程序中的變量

    1.1             DECLARE局部變量

    DECLARE var_name[,...] type [DEFAULT value]
    這個語句被用來聲明局部變量。
    要給變量提供一個默認值,請包含一個DEFAULT子句。
    值可以被指定為一個表達式,不需要為一個常數。
    如果沒有DEFAULT子句,初始值為NULL
    局部變量的作用范圍在它被聲明的BEGIN ... END塊內。
    它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。

    1.2             變量SET語句

    SET var_name = expr [, var_name = expr] 
    在存儲程序中的SET語句是一般SET語句的擴展版本。
    被參考變量可能是子程序內聲明的變量,或者是全局服務器變量。
    在存儲程序中的SET語句作為預先存在的SET語法的一部分來實現。這允許SET a=x, b=y, ...這樣的擴展語法。
    其中不同的變量類型(局域聲明變量及全局和集體變量)可以被混合起來。
    這也允許把局部變量和一些只對系統變量有意義的選項合并起來。

    1.3             SELECT ... INTO語句

    SELECT col_name[,...] INTO var_name[,...] table_expr
    這個SELECT語法把選定的列直接存儲到變量。
    因此,只有單一的行可以被取回。
    SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
    注意,用戶變量名在MySQL 5.1中是對大小寫不敏感的。

    重要: SQL變量名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,并包含一個與列相同名字的局部變量,MySQL當前把參考解釋為一個變量的名字。

    1.10     MySQL 存儲過程參數類型(in、out、inout

    此小節內容來自:

    參見地址:http://www.tkk7.com/nonels/archive/2009/04/22/233324.html

    MySQL 存儲過程參數(in

    MySQL 存儲過程 “in” 參數:跟 C 語言的函數參數的值傳遞類似, MySQL 存儲過程內部可能會修改此參數,但對 in 類型參數的修改,對調用者(caller)來說是不可見的(not visible)。

    MySQL 存儲過程參數(out

    MySQL 存儲過程 “out” 參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值

    MySQL 存儲過程參數(inout

    MySQL 存儲過程 inout 參數跟 out 類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 inout 參數傳遞值給存儲過程。

    總結

    如果僅僅想把數據傳給 MySQL 存儲過程,那就使用“in” 類型參數;如果僅僅從 MySQL 存儲過程返回值,那就使用“out” 類型參數;如果需要把數據傳給 MySQL 存儲過程,還要經過一些計算后再傳回給我們,此時,要使用“inout” 類型參數。

    1.11     例子:

    1.1            創建存儲過程

    (輸出參數)返回值的存儲過程:

    --刪除存儲過程

    DROP PROCEDURE IF EXISTS proc_employee_getCount

    --創建存儲過程

    CREATE PROCEDURE proc_employee_getCount(out n int)

    BEGIN

         SELECT COUNT(*) FROM employee ;

    END

    --MYSQL調用存儲過程

    CALL proc_employee_getCount(@n);

    帶輸入參數的存儲過程:

    --刪除存儲過程

    DROP PROCEDURE IF EXISTS proc_employee_findById;

    --創建存儲過程

    CREATE PROCEDURE proc_employee_findById(in n int)

    BEGIN

         SELECT * FROM employee where id=n;

    END

    --定義變量

    SET @n=1;

    --調用存儲過程

    CALL proc_employee_findById(@n);

    操作存儲過程時應注意:

    1.          刪除存儲過程時只需要指定存儲過程名即可,不帶括號;

    2.          創建存儲過程時,不管該存儲過程有無參數,都需要帶括號;

    3.          在使用SET定義變量時應遵循SET的語法規則;

    SET @變量名=初始值;

    4.          在定義存儲過程參數列表時,應注意參數名與數據庫中字段名區別開來,否則將出現無法預期的結果

    1.12     Java代碼調用存儲過程(JDBC)

    相關APIjava.sql.CallableStatement

    使用到java.sql.CallableStatement接口,該接口專門用來調用存儲過程;

    該對象的獲得依賴于java.sql.Connection;

    通過Connection實例的prepareCall()方法返回CallableStatement對象

    prepareCall()內部為一固定寫法{call 存儲過程名(參數列表1,參數列表2)}可用?占位

    eg: connection.prepareCall("{call proc_employee(?)}");

    存儲過程中參數處理:

    輸入參數:通過java.sql.CallableStatement實例的setXXX()方法賦值,用法等同于java.sql.PreparedStatement

    輸出參數:通過java.sql.CallableStatement實例的registerOutParameter(參數位置, 參數類型)方法賦值,其中參數類型主要使用java.sql.Types中定義的類型

    Java代碼調用帶輸入參數的存儲過程 (根據輸入ID查詢雇員信息)

    publicvoid executeProcedure()

        {

            try {

                /**

                 *callableStatementjava.sql.CallableStatement

                 *connectionjava.sql.Connection

                 *jdbc調用存儲過程原型

                 *{call存儲過程名(參數列表1,參數列表2)}可用?代替

                 */

                callableStatement=connection.prepareCall("{call proc_employee_findById(?)}");

                callableStatement.setInt(1, 1); //設置輸入參數

                resultSet=callableStatement.executeQuery();//執行存儲過程

                if(resultSet.next())

                {

                    System.out.println(resultSet.getInt(1)+""t"+resultSet.getString(2));

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }  

    Java代碼調用帶輸出參數的存儲過程 (返回數據庫中的記錄數)

    publicvoid executeProcedure()

        {

            try {

                /**

                 *callableStatementjava.sql.CallableStatement

                 *connectionjava.sql.Connection

                 *jdbc調用存儲過程原型

                 *{call存儲過程名(參數列表1,參數列表2)}可用?代替

                 */

                callableStatement=connection.prepareCall("{call proc_employee_getCount(?)}");

                //設置輸出參數

                callableStatement.registerOutParameter(1, Types.INTEGER);

                //執行存儲過程

                resultSet=callableStatement.executeQuery();

                if(resultSet.next())

                {

                    System.out.println(resultSet.getInt(1));

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    1.13       聲明:

    此文檔中除MySQL 存儲過程參數類型(inoutinout小節來自網上,其余均為本人原創,歡迎大家轉載,如有不足,請指教。

    由于是在word中編輯好拷貝過來的所以字體較小大家點此下載電子文檔

    posted on 2009-11-24 17:12 雪山飛鵠 閱讀(116095) 評論(30)  編輯  收藏

    Feedback

    # re: 跟我學MySQL存儲過程 2009-11-24 18:03 FOG
    好的很,聊咋了!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2010-07-12 17:05 淘寶網女裝皇冠店
    MySQL存儲過程  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2011-05-05 22:27 lianjinhui
    太好了.  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2011-12-15 18:40 程序員之家
    好東西啊 謝謝  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-03-21 14:22 很受用
    真的很受用!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程[未登錄] 2012-04-12 15:25 xiao
    不錯  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-04-24 13:49 黃師傅
    不錯  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-06-18 17:03 kkkk
    都沒有事務!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-08-03 15:27 fs
    sdffsdfsdf  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-08-03 15:28 fs
    fsdf
      回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-09-16 02:14 少年阿賓
    寫得相當不錯,呵呵,學習了  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-11-04 12:14 sf
    謝謝了!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-12-03 17:50 郭超哈哈哈
    很受用啊,謝謝了  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2012-12-21 12:05 hdn
    奏是滴@FOG
      回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-02-03 11:15 litegrass
    感謝樓主  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-03-01 09:24 yanlong
    先記下來,呵呵  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-03-21 17:25 memory
    給力!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程[未登錄] 2013-04-08 15:02 w
    多謝!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程[未登錄] 2013-05-28 19:44
    膜拜 講解的很形象  回復  更多評論
      

    # re: 跟我學MySQL存儲過程[未登錄] 2013-05-28 19:45
    好好好!  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-07-09 14:28 陳念
    謝謝,受教了~  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-09-29 15:00 我是來學修改的
    修改的例子呢 給一個啊   回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2013-11-27 14:30 陳云展
    最后一個例子是錯誤的。耽誤我半天時間。希望大家注意了。  回復  更多評論
      

    # re: 跟我學MySQL存儲過程[未登錄] 2014-01-08 15:42 111
    沒有循環語句  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-01-24 11:01 ddad
    dfdsdff  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-02-11 11:04 手表之家
    非常有用,看完入門了  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-07-17 11:09 ly
    很好  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-08-13 20:36 aaaaaaaaaa
    aaa  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-08-22 17:52 俄方違反
    ;了,了  回復  更多評論
      

    # re: 跟我學MySQL存儲過程 2014-08-22 17:52 俄方違反
    啥雞巴玩意  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲欧洲日产国码av系列天堂| 中文字幕无线码免费人妻| 在线视频免费观看高清| 亚洲AV日韩AV永久无码色欲| 中文字幕亚洲专区| 黄色网址免费观看| 一区二区三区AV高清免费波多| 成人A级毛片免费观看AV网站| 亚洲中文字幕无码久久精品1| 亚洲日韩在线中文字幕综合| 亚洲色偷偷狠狠综合网| **一级毛片免费完整视| 黄色免费在线网址| 亚洲毛片免费观看| 中文字幕亚洲专区| 日韩午夜免费视频| 日本免费一区二区三区四区五六区| 国产精品国产亚洲精品看不卡| 久久精品免费大片国产大片| 四虎亚洲精品高清在线观看| 久久久久国产亚洲AV麻豆| 无码国产精品一区二区免费式影视 | 香蕉视频在线观看免费国产婷婷| 亚洲人成网站日本片| 亚洲av中文无码| 一个人看的www在线观看免费| 亚洲综合在线一区二区三区| 亚洲欧洲日产国码av系列天堂| 国产线视频精品免费观看视频| 国产黄色一级毛片亚洲黄片大全| xxxxx做受大片视频免费| 亚洲 暴爽 AV人人爽日日碰| 亚洲欧洲精品无码AV| 日韩中文字幕免费| av无码国产在线看免费网站| 免费人成在线观看网站| 国产日韩久久免费影院| 国产午夜亚洲精品不卡电影| 亚洲国产精品ⅴa在线观看| 亚洲毛片免费观看| 亚洲黄色免费网址|