求个大佬帮忙改下这段mysql的存储过程 一直报错 改了半天 40C

delimiter //
create procedure pp()
declare aa varchar(10);
declare bb varchar(10);
declare cc varchar(10);
declare dd varchar(10);
declare ee varchar(10);
declare ff varchar(10);
declare gg varchar(10);
declare ii int not null;
deciare c1 cursor

selecr * from
(select id id1,a from t3 where id=1) a,
(select id id2,b from t3 where id=2) b,
(select id id3,c from t3 where id=3) c,
(select id id4,d from t3 where id=4) d,
(select id id5,e from t3 where id=5) e,
(select id id6,f from t3 where id=6) f,
(select id id7,g from t3 where id=7) g;
open c1;
fetch next from c1 into aa,bb,cc,dd,ee,ff,gg,ii;
declare x int;
begin
for i in c1;
read_loop:Loop
select count(m) into x
from (
select i.id1 m
union
select i.id2
union
select i.id3
union
select i.id4
union
select i.id5
union
select i.id6
union
select i.id7
);
if
x/7>0.5 then
insert into t4 values(i.a,i.b,i.c,i.d,i.e,i.f,i.g);
commit;
end if;
leave read_loop;
end loop read_loop;
close c1;
end;
//
本意是用游标找到t3表的的笛卡尔积中每行数据每个字段id重复不超过一半的数据然后插入到t4表中 但是写出来一直报错 新手 一直改然后一直报错 哪位哥哥姐姐看下这个怎么修正能运行
帮帮忙 改完能用的话我可以再给20c 拜谢

0

2个回答

... 【deciare c1 cursor】改成declare ,【selecr * from 】改成select...另外问一下【for i in c1;】i是什么呀?;

0
weixin_42790422
铁头娃呀 大哥 我后来改了改 不报语法错误了 就是没有数据出来
10 个月之前 回复

CREATE PROCEDURE pp ()
BEGIN
DECLARE iid1 INT;

DECLARE iid2 INT;

DECLARE iid3 INT;

DECLARE iid4 INT;

DECLARE iid5 INT;

DECLARE iid6 INT;

DECLARE iid7 INT;

DECLARE a1 VARCHAR (10);

DECLARE b1 VARCHAR (10);

DECLARE c1 VARCHAR (10);

DECLARE d1 VARCHAR (10);

DECLARE e1 VARCHAR (10);

DECLARE f1 VARCHAR (10);

DECLARE g1 VARCHAR (10);
DECLARE x INT;
DECLARE cur_c CURSOR FOR SELECT
id1,
id2,
id3,
id4,
id5,
id6,
id7,
a,
b,
c,
d,
e,
f,
g
FROM
(SELECT id id1, a FROM t3) a,
(SELECT id id2, b FROM t3) b,
(SELECT id id3, c FROM t3) c,
(SELECT id id4, d FROM t3) d,
(SELECT id id5, e FROM t3) e,
(SELECT id id6, f FROM t3) f,
(SELECT id id7, g FROM t3) g;

OPEN cur_c;

read_loop :
LOOP

FETCH NEXT
FROM
cur_c INTO iid1,
iid2,
iid3,
iid4,
iid5,
iid6,
iid7,
a1,
b1,
c1,
d1,
e1,
f1,
g1;

SELECT
count(m) INTO x
FROM
(
SELECT
iid1 m
UNION
SELECT
iid2
UNION
SELECT
iid3
UNION
SELECT
iid4
UNION
SELECT
iid5
UNION
SELECT
iid6
UNION
SELECT
iid7
) r;

IF x / 7 > 0.5 THEN
INSERT INTO t4
VALUES
(t3.a, t3.b, t3.c,t3.d,t3.e,t3.f,t3.g);

COMMIT;

END
IF;

LEAVE read_loop;

END
LOOP
read_loop;

CLOSE cur_c;

END

这是我后来改的 改完之后不报错 然后运行完了没数据出来 大哥们帮忙看下哪里写的有问题啊


0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MySQL数据库定义存储过程总是报语法错误的解决方法
存储过程是数据库的重要工具,它的作用相当于高级编程语言中的函数,一旦定义好了,在后续操作中就可以直接调用,无需再进行编译。定义存储过程的方法有很多,不同的数据库语法也各不相同,这里不再赘述。我要说的是一种语法错误的解决方法。假设现在有一个课程数据库,数据库课程表内容如下:现在我想编写一个存储过程,输入是课程编号,输出是课程名称。编写的代码如下:create procedure course_id_...
MySQL中存储过程无限报错的问题(delimiter)
今天学习MySQL的存储过程的时候,在创建存储过程的时候无限报错,我用的是MySQL的5.6.x版本 后来才发现不能把delimiter语句写完后删除再写create procedure语句(我用了小写表达,免得有人读的时候看大写单词费劲)我天真的以为delimiter语句会被MySQL这个程序存储简单示例如下:delimiter // #将delim
MySQL的存储过程declare语句报错 游标
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_ave_cursor_procedure`() BEGIN declare aveno char(11); declare avename char(10); declare avegrade float; drop table if exists fail_stude
MySQL 存储过程 while 语句里不能声明 DECLARE 变量
在 while do 语句里千万不能声明变量, 否则会报语法错误, 找了好久才找到的答案.
mysql存储过程一次连接多次调用失败的问题解决
这个问题也困扰了我很长时间,准确的说正是因为他的存储过程无法在同一连接中2次或者多次执行,我大幅修该了程序架构,全部题换成了sql,但是毕竟sql无法执行有相当逻辑的代码,最总让我从新测试以求寻找解决之道。 问题是这样的,在直接使用mysql c api构建应用的时候,一个连接只能执行一次存储过程,不管怎样free再次利用这个连接的时候就会出现不能执行qurry的提示,我想,这么大型的软件 不会
Mysql创建存储过程输入sql语句结束时出错
在MySQL中每行命令都是用“;”结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而DELIMITER原本就是“;”的意思,因此用这个命令转换一下“;”为“//”,这样只有收到“//”才认为指令结束可以执行,问题出在//和语句之间要有个空格才会执行。
MySQL存储过程中的错误处理 以及mybatis调用存储过程的例子
MySQL存储过程中的错误处理 参考链接: http://blog.csdn.net/liyongshun82/article/details/52813711 mybatis中调用存储过程 参考链接: https://www.cnblogs.com/hellokitty1/p/5807392.html 存储过程: CREATE PROCEDURE `sp_combine_admin_gr...
Mysql创建存储过程时出现ERROR 1064错误
ERROR 1064 (42000):ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE i INT DEFAULT 0'
mysql 创建存储过程报错
mysql5以上的版本都支持存储过程 我先创建了一张表: create table tb_user ( user_id int primary key, user_name varchar(20) not null ); 默认情况下,创建存储过程会报错,如下: mysql> create procedure pr_gen_users() -> begin
MySql执行存储过程时错误的处理方式
创建一个简单的存储过程: DELIMITER $$ CREATE PROCEDURE proc_book() BEGIN SELECT * FROM book; END $$ DELIMITER ; 调用这个存储过程: CALL proc_book(); 有可能会出现以下错误代码: ERROR 1436 (HY000): Thread stack overrun 修改方...
Q759669.zip 仿weibo短地址跳转系统
Q759669.zip 仿weibo短地址跳转系统 https://ask.csdn.net/questions/759669 求个大佬帮忙解释一下这个链接是怎么构成的怎么做的
MySQL之迁移data文件夹,删除data文件夹报错
1、在my.ini配置文件里修改mysql存储的数据路径,我将以前的数据存储路径找到,复制data文件夹,删除现在的路径的data文件夹,发现提示该文件夹被另一个程序打开,但是,我并没有用另一个程序打开它呀,我还把电脑重启啦,发现并没有什么作用。 最后我把mysql服务停了, 才删除成功的。在解决这个问题的过程中浪费啦好多时间,希望下次引以为鉴。 ...
工资管理系统
&lt;?xml version="1.0" encoding="UTF-8"?&gt; <!DOCTYPE hibernate-reverse-engineering SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN"> -<hibernate-reverse-engineering> -<table schema="SCOTT" name="BIZ_ACCOUNT"> -<primary-key> <key-column name="ID" type="java.lang.Integer"/> </primary-key> </table> -<table schema="SCOTT" name="BIZ_CHECK_RESULT"> <column name="ID" type="java.lang.Integer"/> </table> -<table schema="SCOTT" name="BIZ_CLAIM_VOUCHER"> <column name="ID" type="java.lang.Integer"/> </table> -<table schema="SCOTT" name="BIZ_CLAIM_VOUCHER_DETAIL"> <column name="ID" type="java.lang.Integer"/> </table> -<table schema="SCOTT" name="SYS_DEPARTMENT"> <column name="ID" type="java.lang.Integer"/> </table> -<table schema="SCOTT" name="SYS_DICTIONARY"> <column name="ID" type="java.lang.Integer"/> </table> -<table schema="SCOTT" name="SYS_POSITION"> <column name="ID" type="java.lang.Integer"/> </table> </hibernate-reverse-engineering>
问题之mysql存储过程CASE条件语句判断根据问题(已解决)
这两天在学习存储过程,在条件语句 CASE WHEN EHEN END CASE 的时候发现一件奇怪的事   mysql&amp;gt; DROP PROCEDURE IF EXISTS `pro_test`; DELIMITER $$ CREATE PROCEDURE `pro_test`(IN parameter int) BEGIN SET @parameter=parameter + 1; ...
mysql创建存储过程declare 变量时报错
今天创建存储过程时,一直提示在decl
myeclipse 项目改名字后 在tomcat部署 不起作用!的原因
把项目名改了以后如 原来的 leaning  struts2, 改为 leaning_struts2 但是在tomcat 部署的webapps里面项目文件夹的名字还是原来的leaning struts2 。 这是为什么呢 ??    谁了解myeclipse 的改名原理呢。!   解决的办法: 右键项目名 在properties下 web 选项下把文件名改掉..!  但我不知道为什么  很...
求助大神MySQL declare报错与多重if的问题
create PROCEDURE Proc_UserLogin(In p_Account nvarchar(50),In P_Pwd nvarchar(50)) BEGIN /*DECLARE P_Id INT; DECLARE P_Login int;       DECLARE P_Del INT; DECLARE P_RightPwd varchar(30);*/ #Declar...
Tomcat端口好修改(解决两台同时启动报错的问题)
修改Tomcat的端口号:    在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号: 首先: 在Tomcat的根(安装)目录下,有一个conf文件夹,双击进入conf文件夹,在里面找到Server.xml文件,打开该文件。 其次:在文件中找到如下文本:                maxThreads="150
查询最近修改的存储过程
使用sqlserver查询最近修改过的存储过程,。。。。。。。。。。。。
mysql 5.7 创建存储过程报错
创建存储过程: mysql&amp;amp;gt; delimiter // mysql&amp;amp;gt; create procedure delete_yy -&amp;amp;gt; begin -&amp;amp;gt; select * from student; -&amp;amp;gt; end // 报错如下: ERROR 1064 (42000): You have an ...
mysql 存储过程1064问题和事例
今天晚上室友说我看看你写的那个框架,听说查询十万条数据只需要几秒钟,我当然愿意展示,开始准备环境: 在公司我是用的oracle,我就把写的存储过程拿出来在我本地的mysql中运行,结果一运行报错: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio
mysql 存储过程,游标和错误提示
SQL语句中的错误提示 在存储过程中处理SQL语句可能导致一条错误消息。例如,向一个表中插入新的行而主键值已经存在,这条INSERT语句会导致一个出错消息,并且MySQL立即停止对存储过程的处理。每一个错误消息都有一个唯一代码和一个SQLSTATE代码。例如,SQLSTATE 23000属于如下的出错代码: Error 1022, "Can't write;duplicate(重复
oracle 存储过程 instr 函数
instr( string1, string2 [, start_position [, nth_appearance ] ] )   参数分析:   string1,源字符串,要在此字符串中查找。  string2:  要在string1中查找的字符串。   start_position: 代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参...
mysql计算的存储过程
BEGIN    DECLARE  count1 INT;     DECLARE  min FLOAT;     DECLARE  b INT;     DECLARE  max FLOAT;     DECLARE  cname VARCHAR(500);    DECLARE  kcode VARCHAR(500);  DECLARE qj1  VARCHAR(500); D
mysql存储过程limit入参问题
1、mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),存储过程中的limit不能使用变量,编译报错,如下:You have an error in your SQL syntax, ...near iStart,iNum 3、怎么解决低版本的问题? ...
mysql 存储过程报错:delimiter
最近在重学sql,刚好学到了存储过程,所以就拿mysql来练习,然后一直出问题。现在记录下create procedure myp9(in cid char) begin select * from custcopy where cust_id=cid; end 这段存储过程初看没有任何问题,但是死活在执行的时候就是报错,说是语法问题。后来百度来n久,问了群,也没有人能解答。后来百度到了一个文章...
从零开始写MySql存储过程(四)通过存储过程实现阶乘的计算
   首先,我认为在实际的开发中,应该没人会用存储过程去计算阶乘,但是用这个作为练习我觉得还是挺不错的,因为通过这个存储过程的编写可以熟悉参数类型,存储过程内部使用自定义变量,循环结构的语法的使用mysql&amp;gt; create procedure jiecheng(in parameter int) -&amp;gt; begin -&amp;gt; declare var int; -...
mysql 存储过程错误调试记录
mysql 存储过程调试记录 非常实用 学习mysql存储过程开发的最佳实践
MySQL 报错问题,求大佬
[img=https://img-bbs.csdn.net/upload/201805/14/1526287297_736956.png][/img][img=https://img-bbs.csdn.net/upload/201805/14/1526287335_504501.png][/img]rnrnrnrn这个错误怎么解决???搞了一天了
MySQL使用命令行窗口创建存储过程报错ERROR 1064 (42000)原因及解决方案
MySQL在创建存储过程的时候,如创建productpricing存储过程,如果使用的是Navicat等程序创建,代码是CREATE PROCEDURE productpricing() BEGIN selectavg(prod_price) as priceaverage fromproducts; END; 但是,如果是在命令行界面,上述语句在fro...
MySQL 6 创建存储过程出现的 ERROR 1064 即解决办法
在用mysql6创建存储过程时原本在mysql5能正常运行的缺提示错误,提示信息如下 [code=&quot;java&quot;]ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use...
mysql 存储过程相关错误解决
1:在Navicat中创建一个带参数的存储过程,输入参数执行时却出现以下错误: Procedure execution failed 1054 - Unknown column 'XXX' in 'field list' 解决:可在输入参数时用单引号把参数值括起来。 1267 - Illegal mix of collations (utf8_unicode_ci,IMPLICIT) a
MYSQL记录存储过程SQL异常错误信息
最近接触到mysql的存储过程,主要用于统计数据。 此外需要记录存储过程的执行状态,异常日志。 MYSQL手册描述(https://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html) CREATE PROCEDURE do_insert(value INT) BEGIN -- Declare va...
MySQL创建存储过程,使用while循环插入数据
// 删除已有的user表 DROP TABLE IF EXISTS `user`; // 创建新的user表 CREATE TABLE `user` ( `userId` INT (11) NOT NULL AUTO_INCREMENT, `userLoginAccount` INT (255) NOT NULL, `userPassword` VARCHAR (2...
两个MySQL存储过程中文问题的解决方案
转载自:http://blog.csdn.net/u012377333/article/details/51863972  MySQL数据库存储过程常出现以下这样的问题:   1、存储信息为乱码,尤其通过执行sql脚本添加数据最为常见。   2、使用where子句是,对中文字符串进行比较,这个问题也是十分常见。   针对存储信息为乱码的问题,一定要注意执行脚本的终端,系
mysql导入存储过程时declare报错的问题解决
在导入存储过程时经常遇见下列DECLARE报错的问题:   Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 ...
mysql存储过程中两个CURSOR嵌套使用
昨天遇到一个mysql开发的问题,从网上发现一篇文章,问题得到解决, 出处:http://www.myexception.cn/mysql/205447.html 转载文章内容如下: mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有
mysql 建立procedure总是报错
问题描述:  在mysql 5.6中建立一个procedure,报错如下: product)root@localhost [lots]> CREATE PROCEDURE per2()      -> BEGIN DECLARE num INT; ERROR 1064 (42000): You have an error in your SQL syntax; check the man
mysql调用存储过程报错
<br />User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irr
创建存储过程时报错搞了半天都不行,大家帮帮忙吧
报错[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql&amp;gt; delimiter 这是源代码:mysql&amp;amp;gt;delimiter 这...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java大佬的学习经验 java大佬学习技术