1. 程式人生 > >MySQL用while實現for迴圈巢狀(插入學生成績資訊功能)

MySQL用while實現for迴圈巢狀(插入學生成績資訊功能)

本次實驗的目的在於實現mysql中自動插入學生成績資訊,即給每個學生自動插入1~6號課程的成績,

屬性如下:

學生學號(i):1~23

課程號(j):1~6

成績:用rand()函式來實現自動填成績

此功能在java中用兩個for迴圈巢狀即可,程式碼如下:

for(int i=0;i<22;i++){
	for(int j=0;j<6;j++){
//此處為jdbc操作插入的語句
//也可以用hibernate插入
	}
}

用儲存過程會有一點for迴圈的影子,但是要注意對於課程號(j)的迴圈結束後要使j重新初始化到1,這樣才能繼續下次對j的迴圈,否則下次直接跳過對j的while迴圈,mysql中sql程式碼如下:

delimiter $	#以delimiter來標記用$表示儲存過程結束
create procedure pro()
begin
declare i int;	#定義i變數
declare j int;	#定義j變數
set i=1;
set j=1;
while(i<=23) do	#對學號的迴圈
	while(j<=6) do	#對課程號的迴圈
		insert into scores(sid,cid,score) values(i,j,rand()*100);	
		set j=j+1;
	end while;
	set i=i+1;
	set j=1;	#重新給j賦值為1,讓它下次繼續從j=1開始進行立面的while迴圈
				#如果不給重新賦值為1,則對j的while迴圈只能進行一次
end while;
end 
$	#儲存過程結束
call pro(); #呼叫pro()儲存方法

這樣插入的結果如下:

id    i     jscore
---------------------

11 171
21272
31348
41424
51577
61614
72137
82242
9231
102476
112580
122670
133110
143239
153366
163413
173569
18363
194110
204242
214378
224463
234580
244613
255125
265287
275359
285434
295593
305663
316135
326285
336323
346460
356528
366662
377126
387243
397339
407466
417512
427662
438176
448292
458333
468487
478537
488625
499113
509290
519310
529482
539579
549648
551015
5610282
5710395
5810427
5910550
6010671
611115
6211211
6311340
6411469
6511523
661169
6712177
6812255
6912346
7012465
7112586
7212636
7313121
7413299
7513331
7613460
771355
7813647
7914118
8014250
8114395
8214424
8314535
841463
8515113
8615253
8715326
8815470
8915574
9015659
9116172
9216282
9316395
9416428
9516557
96166100
9717129
9817243
9917331
10017 424
10117 530
10217 675
10318 185
10418 299
10518 342
10618 413
10718 539
10818 654
10919 153
11019 26
11119 369
11219 427
11319 527
11419 657
11520 12
11620 239
11720 391
11820 435
11920 55
12020 617
12121 171
12221 26
12321 316
12421 462
12521 563
12621 628
12722 151
12822 270
12922 396
13022 473
13122 575
13222 658
13323 166
13423 255
13523 376
13623 417
13723 555
13823 624