求助这个mysql的语法给修正了

时间:2021-04-22 11:23:35
declare
  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的结果,想用游标实现了

#4


自己先参考手册中的语法改一下吧。有什么问题再来问。

MySQL官方文档  http://dev.mysql.com/doc/refman/5.1/zh/index.html

#5


有一个字段是从select的结果---???
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


引用 4 楼 acmain_chm 的回复:
自己先参考手册中的语法改一下吧。有什么问题再来问。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
我就是帮别人弄一下。我也不是研究这个,就想在这找人帮帮忙。怎么就非得看文档呢,,,

#8


您要是会并且明白了我的意思,就帮个忙。

#9


引用 5 楼 aleng18 的回复:
有一个字段是从select的结果---???
VALUES
      ('15550', aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
这个啊。

#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


引用 14 楼 mr_mablevi 的回复:
楼主,你把整个sp发给我,我修改好贴出来 给你试试.
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 | 社会            |

+----+-------------+-------------+

#18


引用
我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。
如果这样,其实你连SP都不需要

直接执行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


引用 19 楼 znit2003 的回复:
千千小手,你好厉害了
汗,我有什么厉害的。。。

#21


引用 18 楼 acmain_chm 的回复:
引用我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。如果这样,其实你连SP都不需要

直接执行SQL语句!

SQL code
insert into creature_loot_template (entry,
       item,
       ChanceOrQuestChanc……
谢谢版主了

#1


不知道大家看的明白吗?我是按照oracle的语法写的。不知道在mysql里面有什么差异没有?要是有的话,麻烦帮忙修正了

#2


急。。。

#3


我就是insert的时候,有一个字段是从select的结果,想用游标实现了

#4


自己先参考手册中的语法改一下吧。有什么问题再来问。

MySQL官方文档  http://dev.mysql.com/doc/refman/5.1/zh/index.html

#5


有一个字段是从select的结果---???
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


引用 4 楼 acmain_chm 的回复:
自己先参考手册中的语法改一下吧。有什么问题再来问。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
我就是帮别人弄一下。我也不是研究这个,就想在这找人帮帮忙。怎么就非得看文档呢,,,

#8


您要是会并且明白了我的意思,就帮个忙。

#9


引用 5 楼 aleng18 的回复:
有一个字段是从select的结果---???
VALUES
      ('15550', aaa.item , '1', '1', '0', '1', '1', '0', '0', '0');
------也没用找出来的结果啊?
这个啊。

#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


引用 14 楼 mr_mablevi 的回复:
楼主,你把整个sp发给我,我修改好贴出来 给你试试.
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 | 社会            |

+----+-------------+-------------+

#18


引用
我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。
如果这样,其实你连SP都不需要

直接执行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


引用 19 楼 znit2003 的回复:
千千小手,你好厉害了
汗,我有什么厉害的。。。

#21


引用 18 楼 acmain_chm 的回复:
引用我一朋友,我看见他还在手工的一句一句的insert,我说oracle可以用游标实现,mysql估计也差不多。但是这个语法上面还是有一些差别的。。。如果这样,其实你连SP都不需要

直接执行SQL语句!

SQL code
insert into creature_loot_template (entry,
       item,
       ChanceOrQuestChanc……
谢谢版主了