mysql 預存程序學習

來源:互聯網
上載者:User

標籤:

基本文法就自己百度吧,雖然我百度了,但是我基本沒看明白,還是多敲代碼的好啊

1、delimiter 

     更改命令結束符(因為在procedure中經常要用到預設的命令結束符--分號(;)
    所以在建立procedure的時候需要定義新的結束符以說明建立procedure的命令結束)這裡將結束符號改成貨幣符號($)

   變數:

    變數的作用範圍同編程裡面類似,在這裡一般是在對應的begin和end之間。在end之後這個變數就沒有作用了,不能使用了。這個同編程一樣。

     另外有種變數叫做會話變數(session variable),也叫做使用者定義的變數(user defined variable)。這種變數要在變數名稱前面加上“@”符號,叫做會話變數,代表整個會話過程他都是有作用的,這個有點類似於全域變數一樣。這種變數用 途比較廣,因為只要在一 個會話內(就是某個應用的一個串連過程中),這個變數可以在被調用的預存程序或者代碼之間共用資料。

   局部變數

      DECLARE var_name[,...] type [DEFAULT value]

      如 declear a int(2) default 2;

     注意該語句使用的地方(不能在外部程式中使用)

 

    指派陳述式set

    SET var_name = expr [, var_name = expr] ...

   如set a=5;set a=a+4;

   賦值的所有操作都要使用set語句,直接使用a=5的操作是非法的

   注意該語句使用的地方(不能在外部程式中使用)

 

    @操作符

     @a用於定義一個全域變數,該變數的生命週期只在本次串連。

     set @a=3;指派陳述式

     set @a=b語句可存在於任何語句塊中

 

2、MySQL中,建立預存程序的基本形式如下:

  1. CREATE PROCEDURE sp_name ([proc_parameter[,...]])  
  2.         [characteristic ...] routine_body 

      其中,sp_name參數是預存程序的名稱;proc_parameter表示預存程序的參數列表; characteristic參數指定預存程序的特性;routine_body參數是SQL代碼的內容,可以用BEGIN…END來標誌SQL代碼的開始和結束。

      proc_parameter中的每個參數由3部分組成。這3部分分別是輸入輸出類型、參數名稱和參數類型。其形式如下:

  1. [ IN | OUT | INOUT ] param_name type 

     其中,IN表示輸入參數;OUT表示輸出參數; INOUT表示既可以是輸入,也可以是輸出; param_name參數是預存程序的參數名稱;type參數指定預存程序的參數類型,該類型可以是MySQL資料庫的任意資料類型。

     列:

    delimiter $

    create procedure mytest(out pamar int)

    begin

     select count(*) into param from user;

    end$

    調用:

    demiliter ;   (命令結束符更改回來)

    call mytest(@num);    (會話變數,參考前面)

    select @num  (讀取變數值)

    drop procedure mytest;   //刪除預存程序

 

    /************************************/

    create procedure mytest(inout sexflag int)

    begin

    select * from user where sex=sexflag

    end$

    set @sexflag=xx

   call  mytest(@sexflag);

 

   /****************************************/

   create procedure test()

   begin

   declare  i int   //定義變數

   set i=0;   //設定變數值

   while i<10 do

   insert into user(username,password) values(i,‘pwd‘);

   或者

   insert into user(username,password) values(concat(‘user‘,i),"pwd");

   set i=i+1;

   end while;

   end$

 

   delimiter ;

   call test();

   /****************/

   delimiter $

   create procedure test1(in param int)

   begin

   (也可以定義變數

       declare i int;

       set i=param+1;

   )

   if param=1 then

      insert into  user(username,password) values(‘eeee‘,‘11111‘);

   else

      insert into user2(usename,password) values(‘ttt‘,‘222222222222‘);

  enf if;

  end$

  delimiter ;

  call test1(1); 或者  call test1(2);

 

   /********************************/

  delimiter $

 create procedure mytest(in param int)

 begin

  set @num=1;

  while @num<20 do

  if param=1 then

     insert into user(username,password) values(concat(‘user‘,@num),‘pwd‘);

  else

     insert into user2(username,password) values(concat(‘user‘,@num),‘pwd‘);

 end if;

set @[email protected]+1;

end while;

end$

 

delimiter ;

call  mytest(1) 或者 call  mytest(2)

 

mysql 預存程序學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.