mysql 預存程序 與 迴圈

來源:互聯網
上載者:User

標籤:while   執行   email   開始   通過   info   rgs   code   員工   


mysql 操作同樣有迴圈語句操作,三種標準迴圈模式:while, loop,repeat, 外加一種非標準迴圈:goto [在c或c#中貌似出現過類型迴圈但是一般不建議用!]


一般格式為:
delimiter // 定義結束符
drop procedure if exists wk; 假如存在則刪除
create procedure name([in | out | input] 參數)

begin

  while-loop-repeat-mysql-code

end //
delimiter ;  還原


定義變數:
  declare count int default 1; 定義count為int類型 並且設定初始值為1;
  set count=1;  修改count變數的值為1
  set count=count+1; 相當於python裡面的自加
列印值:
   select count;
條件陳述式:
if mysql_condtion then;
  mysql_code
else
  mysql_code
end if;

if mysql_condtion then;
  mysql_code
end if;


Sample_1:while

while mysql_condtion do
  mysql_code
end while;


Sample_2:loop
loop_name:loop
  mysql_code
end loop;

Sample_3:repeat
repeat   mysql_codeuntil mysql_condtionend repeat;

BEGIN        declare i int default 0;    loop_label: loop                set i=i+1;        if i<8 then            iterate loop_label;        end if;        if i>=10 then            leave loop_label;        end if;        select i;    end loop loop_label;END

預存程序包含了一系列可執行檔sql語句,預存程序存放於MySQL中,通過調用它的名字可以執行其內部的一堆sql

使用預存程序的優點:

#1. 用於替代程式寫的SQL語句,實現程式與sql解耦#2. 基於網路傳輸,傳別名的資料量小,而直接傳sql資料量大

使用預存程序的缺點:

#1. 程式員擴充功能不方便

補充:程式與資料庫結合使用的三種方式

#方式一:    MySQL:預存程序    程式:調用預存程序#方式二:    MySQL:    程式:純SQL語句#方式三:    MySQL:    程式:類和對象,即ORM(本質還是純SQL語句)
對於預存程序,可以接收參數,其參數有三類:#in          僅用於傳入參數用#out        僅用於傳回值用#inout     既可以傳入又可以當作傳回值


廢話不多說 上代碼


#loop 迴圈
delimiter //
drop procedure if exists sum2;
create procedure sum2(args int)
begin
declare sum int ;
declare count int ;
set count=1;
set sum=1;
loop_name:loop
if count>args then
leave loop_name;
end if;
set sum=sum+count;
set count=count+1;
end loop;
select sum; 輸出
end //
delimiter ;




delimiter //
drop procedure if exists sum2;
create procedure sum2(args int)
begin
declare sum int ;
declare count int ;
set count=1;
set sum=1;
loop_name:loop --迴圈開始
if count>args then
leave loop_name; --判斷條件成立則結束迴圈
end if;
set sum=sum+count;
set count=count+1;
end loop; --迴圈結束
select sum; --輸出結果
end //
delimiter ;






desc copy;
copy_struct: id int priymary key auto_increment
        sname varchar(25) not null

#無參 預存程序
delimiter //
drop procedure if exists loopcc;
create procedure loopcc()
begin
declare i int;
set i=0;
repeat
insert into copy (sname) values (now());
set i=i+1;
until i>=20
end repeat;
end //
delimiter;



#有參 預存程序
delimiter //
drop procedure if exists sum3;
create procedure sum3(a int)
begin
declare sum int default 0;
declare i int default 1;
repeat -- 迴圈開始
set sum=sum+i;
set i=i+1;
until i>a end repeat; -- 迴圈結束
select sum; -- 輸出結果
end//
delimiter ;
---執行預存程序
call sum3(100);
drop prodedure if exists sum3;





desc register_time;
register_time struct:
id int parmary key auto_increment,
name varchar(15) not null,
register_time datetime not null,
email varchar(60) not null default ‘[email protected]‘
gender enum(‘male‘,‘female‘) default ‘male‘


#預存程序
delimiter //
create procedure p1()
BEGIN
DECLARE num INT ;
SET num = 0 ;
WHILE num < 100000 DO --迴圈開始
insert into index_test (name,regiter_time) values(‘李宗軍‘,now());
SET num = num + 1 ;
END WHILE ; --結束

END //
delimiter ;






desc copy;
copy_struct: id int priymary key auto_increment
        sname varchar(25) not null

#while 迴圈
delimiter //
drop procedure if exists wk;
create procedure wk()
begin
declare i int;
set i=1;
while i<8 do
insert into copy (sname) values (‘你大爺‘);
set i=i+1;
end while;
end //
delimiter ;


desc student;
student_stuct:
sid int parmary key auto_increment,
gender enum(‘male‘,‘female‘) default ‘male‘,
class_id int not null,
sname varchar(32) not null

#傳參數查詢 指定範圍的 資料

delimiter //
drop procedure if exists get_data;
create procedure get_data(in id_value int)
begin
  select * from student where sid>id_value;
end //

delimiter ;

call get_data(4);
drop procedure get_data;



create table emp(
eid int primary key auto_increment,
ename varchar(20),
sex enum(‘male‘,‘female‘) not null default ‘male‘,
hire_time datetime default now(),
salary varchar(15) not null default ‘egon大哥看著給!‘,
department_fk int
);


insert into emp (ename,department_fk) values(‘egon‘,2);

 


查詢員工

--建立預存程序

delimiter //
drop procedure if exists get_emp_info;
create procedure get_emp_info(eid int)
begin
select * from emp where emp.eid=eid;
end //

delimiter ;

call get_emp_info(1);
drop procedure get_emp_info;


同樣的 在begin裡面可執行其他動作來進行值得修改與查詢

Sample:

  begin
    update emp set sex=‘female‘ where eid=1;
  end

  begin
    truncate emp;
  end

  begin
    delete from emp;
  end

  
out 參數的使用

delimiter //
drop procedure if exists get_res;
create procedure get_res(out res int)
begin
  select department_fk from emp where eid=res;
  set res=5
end //

delimiter ;

set @res=1;
call get_res(@res);
select @res;

















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.