cursor aa is
SELECT * FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000;
begin
for aaa in aa loop
INSERT INTO creature_loot_template
(entry,
item,
ChanceOrQuestChance,
lootmode,
groupid,
mincountOrRef,
maxcount,
lootcondition,
condition_value1,
condition_value2)
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
end loop;
end;
21 个解决方案
#1
不知道大家看的明白吗?我是按照oracle的语法写的。不知道在mysql里面有什么差异没有?要是有的话,麻烦帮忙修正了
#2
急。。。
#3
我就是insert的时候,有一个字段是从select的结果,想用游标实现了
#5
有一个字段是从select的结果---???
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
#6
手册中的例子
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
END
#7
我就是帮别人弄一下。我也不是研究这个,就想在这找人帮帮忙。怎么就非得看文档呢,,,
#8
您要是会并且明白了我的意思,就帮个忙。
#9
这个啊。
#10
楼主想要什么效果,?我试着写个看看.
#11
SELECT item FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000
SELECT item FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000这样的一句select。这个结果集是insert的values的一个字段。需求就是这样的。你能明白吗?
#12
insert 语句如下:
INSERT INTO creature_loot_template就是这样红字的字段。谢谢啦
(entry,
item,
ChanceOrQuestChance,
lootmode,
groupid,
mincountOrRef,
maxcount,
lootcondition,
condition_value1,
condition_value2)
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
#13
我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。
#14
楼主,你把整个sp发给我,我修改好贴出来 给你试试.
#15
sp是什么?我的需求还不清楚吗?你想要了解什么?我给你发
#16
要不你加我Q。164855726
#17
就是你整个存储过程贴一下,我修改好再发;或则你看下面这个例子,自己改改
表:
学生表student,和课程表course,选课表 choose ;
create table student(id int,sno int);
insert into student values (1,1),(2,2),(3,3),(4,4),(5,5);
create table course(id int,name varchar(10))
insert into course values (1,'语文'),(2,'数学'),(3,'英语'),(4,'社会'); create table choose (id int primary key auto_increment,student_sno int,course_name varchar(10));
实现的效果是:选课表里面记录:每个学生都选择课程表里面的全部课程.
DROP PROCEDURE IF EXISTS sp_choose;
delimiter //
create procedure sp_choose()
begin
declare a int;
declare b varchar(10) character set utf8;
declare done1,done2 int default 0;
declare cur_1 cursor for select name from course;
declare continue handler for not found set done1=1;
open cur_1;
repeat
fetch cur_1 into b;
if not done1 then
begin
declare cur_2 cursor for select sno from student;
declare continue handler for not found set done2=1;
open cur_2;
repeat
fetch cur_2 into a;
if not done2 then
insert into choose(student_sno,course_name) values (a,b);
end if;
until done2 end repeat;
close cur_2;
set done2=0;
end;
end if;
until done1 end repeat;
close cur_1;
end;//
delimiter ;
----------------------
choose表显示:
mysql> select * from choose;
+----+-------------+-------------+
| id | student_sno | course_name |
+----+-------------+-------------+
| 1 | 1 | 语文 |
| 2 | 2 | 语文 |
| 3 | 3 | 语文 |
| 4 | 4 | 语文 |
| 5 | 5 | 语文 |
| 6 | 1 | 数学 |
| 7 | 2 | 数学 |
| 8 | 3 | 数学 |
| 9 | 4 | 数学 |
| 10 | 5 | 数学 |
| 11 | 1 | 英语 |
| 12 | 2 | 英语 |
| 13 | 3 | 英语 |
| 14 | 4 | 英语 |
| 15 | 5 | 英语 |
| 16 | 1 | 社会 |
| 17 | 2 | 社会 |
| 18 | 3 | 社会 |
| 19 | 4 | 社会 |
| 20 | 5 | 社会 |
+----+-------------+-------------+
表:
学生表student,和课程表course,选课表 choose ;
create table student(id int,sno int);
insert into student values (1,1),(2,2),(3,3),(4,4),(5,5);
create table course(id int,name varchar(10))
insert into course values (1,'语文'),(2,'数学'),(3,'英语'),(4,'社会'); create table choose (id int primary key auto_increment,student_sno int,course_name varchar(10));
实现的效果是:选课表里面记录:每个学生都选择课程表里面的全部课程.
DROP PROCEDURE IF EXISTS sp_choose;
delimiter //
create procedure sp_choose()
begin
declare a int;
declare b varchar(10) character set utf8;
declare done1,done2 int default 0;
declare cur_1 cursor for select name from course;
declare continue handler for not found set done1=1;
open cur_1;
repeat
fetch cur_1 into b;
if not done1 then
begin
declare cur_2 cursor for select sno from student;
declare continue handler for not found set done2=1;
open cur_2;
repeat
fetch cur_2 into a;
if not done2 then
insert into choose(student_sno,course_name) values (a,b);
end if;
until done2 end repeat;
close cur_2;
set done2=0;
end;
end if;
until done1 end repeat;
close cur_1;
end;//
delimiter ;
----------------------
choose表显示:
mysql> select * from choose;
+----+-------------+-------------+
| id | student_sno | course_name |
+----+-------------+-------------+
| 1 | 1 | 语文 |
| 2 | 2 | 语文 |
| 3 | 3 | 语文 |
| 4 | 4 | 语文 |
| 5 | 5 | 语文 |
| 6 | 1 | 数学 |
| 7 | 2 | 数学 |
| 8 | 3 | 数学 |
| 9 | 4 | 数学 |
| 10 | 5 | 数学 |
| 11 | 1 | 英语 |
| 12 | 2 | 英语 |
| 13 | 3 | 英语 |
| 14 | 4 | 英语 |
| 15 | 5 | 英语 |
| 16 | 1 | 社会 |
| 17 | 2 | 社会 |
| 18 | 3 | 社会 |
| 19 | 4 | 社会 |
| 20 | 5 | 社会 |
+----+-------------+-------------+
#18
如果这样,其实你连SP都不需要
直接执行SQL语句!
直接执行SQL语句!
insert into creature_loot_template (entry,
item,
ChanceOrQuestChance,
lootmode,
groupid,
mincountOrRef,
maxcount,
lootcondition,
condition_value1,
condition_value2)
select '15550',item , '1', '1', '0', '1', '1', '0', '0', '0' FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000;
#19
千千小手,你好厉害了
#20
汗,我有什么厉害的。。。
#21
谢谢版主了
#1
不知道大家看的明白吗?我是按照oracle的语法写的。不知道在mysql里面有什么差异没有?要是有的话,麻烦帮忙修正了
#2
急。。。
#3
我就是insert的时候,有一个字段是从select的结果,想用游标实现了
#4
#5
有一个字段是从select的结果---???
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
#6
手册中的例子
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO test.t3 VALUES (a,b);
ELSE
INSERT INTO test.t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
END
#7
我就是帮别人弄一下。我也不是研究这个,就想在这找人帮帮忙。怎么就非得看文档呢,,,
#8
您要是会并且明白了我的意思,就帮个忙。
#9
这个啊。
#10
楼主想要什么效果,?我试着写个看看.
#11
SELECT item FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000
SELECT item FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000这样的一句select。这个结果集是insert的values的一个字段。需求就是这样的。你能明白吗?
#12
insert 语句如下:
INSERT INTO creature_loot_template就是这样红字的字段。谢谢啦
(entry,
item,
ChanceOrQuestChance,
lootmode,
groupid,
mincountOrRef,
maxcount,
lootcondition,
condition_value1,
condition_value2)
VALUES
('15550',aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
#13
我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。
#14
楼主,你把整个sp发给我,我修改好贴出来 给你试试.
#15
sp是什么?我的需求还不清楚吗?你想要了解什么?我给你发
#16
要不你加我Q。164855726
#17
就是你整个存储过程贴一下,我修改好再发;或则你看下面这个例子,自己改改
表:
学生表student,和课程表course,选课表 choose ;
create table student(id int,sno int);
insert into student values (1,1),(2,2),(3,3),(4,4),(5,5);
create table course(id int,name varchar(10))
insert into course values (1,'语文'),(2,'数学'),(3,'英语'),(4,'社会'); create table choose (id int primary key auto_increment,student_sno int,course_name varchar(10));
实现的效果是:选课表里面记录:每个学生都选择课程表里面的全部课程.
DROP PROCEDURE IF EXISTS sp_choose;
delimiter //
create procedure sp_choose()
begin
declare a int;
declare b varchar(10) character set utf8;
declare done1,done2 int default 0;
declare cur_1 cursor for select name from course;
declare continue handler for not found set done1=1;
open cur_1;
repeat
fetch cur_1 into b;
if not done1 then
begin
declare cur_2 cursor for select sno from student;
declare continue handler for not found set done2=1;
open cur_2;
repeat
fetch cur_2 into a;
if not done2 then
insert into choose(student_sno,course_name) values (a,b);
end if;
until done2 end repeat;
close cur_2;
set done2=0;
end;
end if;
until done1 end repeat;
close cur_1;
end;//
delimiter ;
----------------------
choose表显示:
mysql> select * from choose;
+----+-------------+-------------+
| id | student_sno | course_name |
+----+-------------+-------------+
| 1 | 1 | 语文 |
| 2 | 2 | 语文 |
| 3 | 3 | 语文 |
| 4 | 4 | 语文 |
| 5 | 5 | 语文 |
| 6 | 1 | 数学 |
| 7 | 2 | 数学 |
| 8 | 3 | 数学 |
| 9 | 4 | 数学 |
| 10 | 5 | 数学 |
| 11 | 1 | 英语 |
| 12 | 2 | 英语 |
| 13 | 3 | 英语 |
| 14 | 4 | 英语 |
| 15 | 5 | 英语 |
| 16 | 1 | 社会 |
| 17 | 2 | 社会 |
| 18 | 3 | 社会 |
| 19 | 4 | 社会 |
| 20 | 5 | 社会 |
+----+-------------+-------------+
表:
学生表student,和课程表course,选课表 choose ;
create table student(id int,sno int);
insert into student values (1,1),(2,2),(3,3),(4,4),(5,5);
create table course(id int,name varchar(10))
insert into course values (1,'语文'),(2,'数学'),(3,'英语'),(4,'社会'); create table choose (id int primary key auto_increment,student_sno int,course_name varchar(10));
实现的效果是:选课表里面记录:每个学生都选择课程表里面的全部课程.
DROP PROCEDURE IF EXISTS sp_choose;
delimiter //
create procedure sp_choose()
begin
declare a int;
declare b varchar(10) character set utf8;
declare done1,done2 int default 0;
declare cur_1 cursor for select name from course;
declare continue handler for not found set done1=1;
open cur_1;
repeat
fetch cur_1 into b;
if not done1 then
begin
declare cur_2 cursor for select sno from student;
declare continue handler for not found set done2=1;
open cur_2;
repeat
fetch cur_2 into a;
if not done2 then
insert into choose(student_sno,course_name) values (a,b);
end if;
until done2 end repeat;
close cur_2;
set done2=0;
end;
end if;
until done1 end repeat;
close cur_1;
end;//
delimiter ;
----------------------
choose表显示:
mysql> select * from choose;
+----+-------------+-------------+
| id | student_sno | course_name |
+----+-------------+-------------+
| 1 | 1 | 语文 |
| 2 | 2 | 语文 |
| 3 | 3 | 语文 |
| 4 | 4 | 语文 |
| 5 | 5 | 语文 |
| 6 | 1 | 数学 |
| 7 | 2 | 数学 |
| 8 | 3 | 数学 |
| 9 | 4 | 数学 |
| 10 | 5 | 数学 |
| 11 | 1 | 英语 |
| 12 | 2 | 英语 |
| 13 | 3 | 英语 |
| 14 | 4 | 英语 |
| 15 | 5 | 英语 |
| 16 | 1 | 社会 |
| 17 | 2 | 社会 |
| 18 | 3 | 社会 |
| 19 | 4 | 社会 |
| 20 | 5 | 社会 |
+----+-------------+-------------+
#18
如果这样,其实你连SP都不需要
直接执行SQL语句!
直接执行SQL语句!
insert into creature_loot_template (entry,
item,
ChanceOrQuestChance,
lootmode,
groupid,
mincountOrRef,
maxcount,
lootcondition,
condition_value1,
condition_value2)
select '15550',item , '1', '1', '0', '1', '1', '0', '0', '0' FROM item_template WHERE name LIKE '%无形%' LIMIT 0, 1000;
#19
千千小手,你好厉害了
#20
汗,我有什么厉害的。。。
#21
谢谢版主了