MySQL預存程序問題

來源:互聯網
上載者:User

以前沒用過MySQL預存程序,第一次寫有很多的不習慣,總結如下: 

下面是一個最簡單的MySQL預存程序,實現兩個數相加

delimiter $$create procedure proc_add(in a int,in b int)begin    declare c int;    if a is null then    set a = 0;    end if;    if b is null then    set b = 0;    end if;            set c = a + b;    select c;end$$delimiter ;

需要特別注意的是 

1. declare語句只能放在預存程序的開始位置,放在後面就會報錯 
2. if 語句的後面必須有then,但是不需要begin,在if結束時需要end if 
3. 判斷是否為NULL倒是和MSSQL一樣都有IS NULL 
4. delimiter是定界符的意思在結束的end後面要添加定界符 
5. end if之後必須跟分號,否則語法錯誤 

下面是一個較常見的情境,判斷表中某列是否存在某值,如果存在執行某操作 

delimiter $$create procedure proc_add_book(in $bookName varchar(200),in $price float)begin    declare $existsFlag int default 0;    select bookId into $existsFlag from book where bookName = $bookName limit 1;    if bookId > 0 then    #if not exists (select * from book where bookNumber = $bookName) then        insert into book(bookNumber,price) values($bookName,$price);    end if;end$$delimiter ;

需要注意的是不能用if exists;exists可以在where後面或者在create object是使用,但是在if語句中不可以使用,只能用變通的方法。

while語句也需要注意,下面是一個while的簡單應用:

delimiter $$create procedure proc_add_books_looply(in $bookName varchar(200),in $price float,in $insertTimes INT)begin    while $insertTimes>0 do    insert into book (bookName,price) values($bookName,$price);    end while;end$$delimiter ;

可以看到while後面跟條件,條件後面要跟一個do,在while迴圈體結束之後需要end while並以分號結束。

以上是一些簡單的總結,希望有用。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.