Rumah > Soal Jawab > teks badan
Sila bantu saya mengetahui sebab ralat dilaporkan Ini adalah kali pertama saya menulis prosedur tersimpan jenis ini:
pembatas $$
buat prosedur mydb()
mulakan
isytiharkan dbname varchar(50);
deklarasi stop int lalai 0. ;
isytihar kursor kursor untuk (pilih nama daripada nama); //Jadual nama menyimpan nama pangkalan data
isytiharkan PENANGAN TERUS UNTUK SQLSTATE '02000' SET stop = null;
open cur;
fetch cur into dbname; Lintas nama pangkalan data
sambil (berhenti bukan batal) lakukan
begin
declare name varchar(200);
declare stop1 int default 0;
declare cur1 cursor for (select prounit_name from dbname.prounit); //获取prounit表中prounit_name字段内容
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop1 = null;
open cur1;
fetch cur1 into name;
while ( stop1 is not null) do
update prounit set name='abc';
fetch cur1 into name;
end while;
close cur1;
end ;
ambil cur ke dalam dbname;
end while;
close cur;
end ;
delimter $$
Ralat semasa melaksanakan prosedur tersimpan: ERROR 1146 (42S02): Jadual 'dbname.prounit' tidak wujud
kenapa?????
淡淡烟草味2017-05-31 10:39:32
Gesaan jelas, jadual tidak wujuddeclare dbname varchar(50);
Nama ditimpa?
迷茫2017-05-31 10:39:32
Mari kita bincangkan beberapa isu tatabahasa.
stop
hendaklah kursor dbname
dan menilai kursor . Jika tidak tiada rujukan untuk berhenti
while ( stop is not null) do
中的stop
应该游标dbname
才对,对游标进行判断.不然对stop没有引用过
最后一个end;
,前面你定义了delimiter $$`以`$$
为结束符,应该改为end$$
,最后不要忘了结尾改成delimiter ;
end;
, sebelum anda mentakrifkan delimiter $$` dengan `$$
sebagai aksara akhir, ia harus ditukar kepada tamatkan $$
, akhirnya jangan lupa untuk menukar pengakhiran kepada delimiter;