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

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

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

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

    雪山飛鵠

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

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

    此文檔中除MySQL 存儲過程參數(shù)類型(in、out、inout小節(jié)來自網(wǎng)上,其余均為本人原創(chuàng),歡迎大家轉(zhuǎn)載,如有不足,請指教。
    由于是在word中編輯好拷貝過來的所以字體較小大家點此下載電子版文檔

      

    MySQL存儲過程

    1.1         CREATE  PROCEDURE  (創(chuàng)建)

    CREATE PROCEDURE存儲過程名 (參數(shù)列表)
       BEGIN
             SQL語句代碼塊
    END
    注意:
    由括號包圍的參數(shù)列必須總是存在。如果沒有參數(shù),也該使用一個空參數(shù)列()。每個參數(shù)默認都是一個IN參數(shù)。要指定為其它參數(shù),可在參數(shù)名之前使用關(guān)鍵詞 OUT或INOUT
    mysql客戶端定義存儲過程的時候使用delimiter命令來把語句定界符從;變?yōu)?/。
    當使用delimiter命令時,你應(yīng)該避免使用反斜杠(‘"’)字符,因為那是MySQL的轉(zhuǎn)義字符。
    如:
    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 存儲過程名)

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

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

    SHOW CREATE PROCEDURE 存儲過程名

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

    SHOW  PROCEDURE  STATUS

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

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

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

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

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

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

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

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

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

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

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

    1.9         存儲程序中的變量

    1.1             DECLARE局部變量

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

    1.2             變量SET語句

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

    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 存儲過程參數(shù)類型(in、out、inout

    此小節(jié)內(nèi)容來自:

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

    MySQL 存儲過程參數(shù)(in

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

    MySQL 存儲過程參數(shù)(out

    MySQL 存儲過程 “out” 參數(shù):從存儲過程內(nèi)部傳值給調(diào)用者。在存儲過程內(nèi)部,該參數(shù)初始值為 null,無論調(diào)用者是否給存儲過程參數(shù)設(shè)置值

    MySQL 存儲過程參數(shù)(inout

    MySQL 存儲過程 inout 參數(shù)跟 out 類似,都可以從存儲過程內(nèi)部傳值給調(diào)用者。不同的是:調(diào)用者還可以通過 inout 參數(shù)傳遞值給存儲過程。

    總結(jié)

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

    1.11     例子:

    1.1            創(chuàng)建存儲過程

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

    --刪除存儲過程

    DROP PROCEDURE IF EXISTS proc_employee_getCount

    --創(chuàng)建存儲過程

    CREATE PROCEDURE proc_employee_getCount(out n int)

    BEGIN

         SELECT COUNT(*) FROM employee ;

    END

    --MYSQL調(diào)用存儲過程

    CALL proc_employee_getCount(@n);

    帶輸入?yún)?shù)的存儲過程:

    --刪除存儲過程

    DROP PROCEDURE IF EXISTS proc_employee_findById;

    --創(chuàng)建存儲過程

    CREATE PROCEDURE proc_employee_findById(in n int)

    BEGIN

         SELECT * FROM employee where id=n;

    END

    --定義變量

    SET @n=1;

    --調(diào)用存儲過程

    CALL proc_employee_findById(@n);

    操作存儲過程時應(yīng)注意:

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

    2.          創(chuàng)建存儲過程時,不管該存儲過程有無參數(shù),都需要帶括號;

    3.          在使用SET定義變量時應(yīng)遵循SET的語法規(guī)則;

    SET @變量名=初始值;

    4.          在定義存儲過程參數(shù)列表時,應(yīng)注意參數(shù)名與數(shù)據(jù)庫中字段名區(qū)別開來,否則將出現(xiàn)無法預(yù)期的結(jié)果

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

    相關(guān)APIjava.sql.CallableStatement

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

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

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

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

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

    存儲過程中參數(shù)處理:

    輸入?yún)?shù):通過java.sql.CallableStatement實例的setXXX()方法賦值,用法等同于java.sql.PreparedStatement

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

    Java代碼調(diào)用帶輸入?yún)?shù)的存儲過程 (根據(jù)輸入ID查詢雇員信息)

    publicvoid executeProcedure()

        {

            try {

                /**

                 *callableStatementjava.sql.CallableStatement

                 *connectionjava.sql.Connection

                 *jdbc調(diào)用存儲過程原型

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

                 */

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

                callableStatement.setInt(1, 1); //設(shè)置輸入?yún)?shù)

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

                if(resultSet.next())

                {

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

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }  

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

    publicvoid executeProcedure()

        {

            try {

                /**

                 *callableStatementjava.sql.CallableStatement

                 *connectionjava.sql.Connection

                 *jdbc調(diào)用存儲過程原型

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

                 */

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

                //設(shè)置輸出參數(shù)

                callableStatement.registerOutParameter(1, Types.INTEGER);

                //執(zhí)行存儲過程

                resultSet=callableStatement.executeQuery();

                if(resultSet.next())

                {

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

                }

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    1.13       聲明:

    此文檔中除MySQL 存儲過程參數(shù)類型(inout、inout小節(jié)來自網(wǎng)上,其余均為本人原創(chuàng),歡迎大家轉(zhuǎn)載,如有不足,請指教。

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

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

    Feedback

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 最近中文字幕无免费| 国内自产少妇自拍区免费| 中国在线观看免费的www| 高潮内射免费看片| 亚洲成AV人片在WWW色猫咪| av在线亚洲欧洲日产一区二区| 亚洲阿v天堂在线2017免费| 亚洲成AV人网址| 亚洲人成网站观看在线播放| 日韩亚洲精品福利| 国产精品亚洲美女久久久| 怡红院亚洲怡红院首页| 久久亚洲国产午夜精品理论片| 亚洲AV无码专区电影在线观看| 久久亚洲精品成人| 久久久久亚洲AV无码网站| 亚洲精品国产福利一二区| 亚洲最大av无码网址| 久久91亚洲人成电影网站| 亚洲男人都懂得羞羞网站| 亚洲精品国产肉丝袜久久| 国产精品亚洲午夜一区二区三区| 中文字幕乱码亚洲无线三区| 色综合久久精品亚洲国产| 黄色大片免费网站| 国产在线精品一区免费香蕉| 久久国产乱子免费精品| 最近免费中文字幕MV在线视频3| baoyu116.永久免费视频| 99re免费在线视频| 国产精品视频永久免费播放| 最近免费2019中文字幕大全| 久久笫一福利免费导航| 114一级毛片免费| 免费看大美女大黄大色| 一本久到久久亚洲综合| 久久99国产亚洲高清观看首页| 久久精品国产亚洲AV无码麻豆| 亚洲成年网站在线观看| 四虎国产精品永免费| 免费女人高潮流视频在线观看|