存儲過程基本語法


  存儲過程就是一條或多條SQL語句的集合,可視為批文件,但作用不僅限於批處理,本文介紹如何創建存儲過程以及變量的使用,如何調用、查看等。

創建語法如下:

          create procedure sp_name([proc_parameter]) (characteristics ...)  routine_body

pro_parameter:參數列表,

列表形式:[in|out|inout]  param_name  type

characteristics:存儲過程的特性,有以下取值

        language sql:說明toutine_body部分是由sql組成;

        [not] deterministic:指明相同的輸入是否會得到相同的輸出,deterministic表示結果確定,not deterministic表示不確定,默認為not deterministic;

        {contains sql | not sql | reads sql data | modifies sql data}:指明子程序使用sql的限制,其中contains sql指不包含讀寫數據的sql語句;not sql表示不包含sql語句;reads sql data說明子程序包含讀數據的語句;modifies sql data表明子程序包含寫數據的語句。默認contains sql。

        sql security {definer | invoker}:指明誰有權限來執行,definer表示只有定義者才能執行,invoker 表示擁有權限的調用者可以執行,默認情況下為definer。

        comment  'String':注釋信息,可以用來描述存儲過程。

routine_body:sql代碼內容,用Begin ...  End來表示sql代碼的開始和結束。

 

舉個簡單的應用例子,有表為fruits存有單價、名稱等,創建存儲過程返回所有水果的評均價格,代碼如下:

        create procedure AvgFruitPrice(out param1 int)

        Begin 

           select avg(f_price) into param1 from fruits;

          End;

變量的使用

    1.定義變量,語法如下:

        Delare var_name [,var_name] ... date_type[DEFAULT value];

        var_name是局部變量名稱,DEFAULT value子句為變量提供初始值。

    2.為變量賦值,語法格式如下:

        Set var_name = expr1[,var_name = expr2] ...;

聲明三個變量,分別為var1,var2,var3,數據類型為int,使用set為變量賦值,代碼如下:

        Declare var1, var2, var3 int;

        Set var1=10, var2=20;

        Set var3 = var1 + var2;

還可以通過select ... from為一個變量賦值:select col_name[, ...] into var_name[, ...]  from table where...。

 

流程控制的使用

    1.IF語句,語法格式如下:

        IF expr_condition THEN statement_list

          [ELSEIF expr_condition THEN statement_list]...

          [ELSE statement_list]

        END IF

    2.case語句,語法格式如下:

       CASE case_expr

          WHEN when_value THEN statement_list

          [WHEN when_value THEN statement_list]...

          [ELSE statement_list]

        END CASE

    3.LOOP語句(循環操作的過程),語法格式如下:

      [loop_label:] LOOP

        statement_list

      END LOOP [loop_label]

    4.LEAVE語句

      LEAVE語句用來退出循環。

        Delare id int default 0;

        add_loop:LOOP

          SET id = id + 1;

            IF id >= 10 THEN LEAVE add_loop;

            END IF;

        END LOOP add_loop;

    5.ITERATE 語句,語法形式:ITERATE label

      該語句只能出現在循環內,意為“再次循環”。

    6.REPEAT語句

      該語句創建一個帶條件判斷的循環的過程,每次語句執行完畢,會對條件表達式進行判斷,如果表達式為真,則循環結束,否則重復循環,語法形式如下:

        [repeat_label:] REPEAT

          statement_list

        UNTIL expr_condition

        END REPEAT [repeat_label]

                 repeat_label為標注名稱(可省略),直至expr_condition條件為真,才會退出循環。

    7.WHILE語句

      該語句創建帶條件判斷的循環過程,與REPEAT語句不同,WHILE 執行語句時先對表達式進行判斷,如果為真則執行循環內語句,否則退出循環,語法形式如下:

        [while_label:] WHILE expr_condition DO

          statement_list

        END WHILE [while_label]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM