存储过程中是否可以同时提前定义一个语句

Main_csdn_String 2018-03-08 10:39:51
CREATE PROCEDURE oldCursor(out oldName TEXT,in domainName varchar(50),in tableName varchar(50))
BEGIN
-- 定义变量
DECLARE tmpName TEXT default '';
DECLARE allName TEXT default '';
DECLARE amount int(11) DEFAULT 0;
DECLARE curl CURSOR FOR select COLUMN_NAME from information_schema.COLUMNS where table_name = 'tbl' and table_schema = 'date';
-- 申明 循环操作 游标
DECLARE continue HANDLER FOR SQLSTATE '02000' set tmpname = null;
OPEN curl;
FETCH curl into tmpName;
WHILE(tmpname is not null)DO
set tmpName = CONCAT(tmpName,',OLD.');
set allName = CONCAT(allName,tmpName);
set amount=amount+1;
FETCH curl into tmpName;
end WHILE;
CLOSE curl;
set allName = substring_index(allName,',OLD.',amount);
set oldName = concat('OLD.',allName);
-- llocate prepare stmt;
END;

想在这个基础之上进行再一次的修改

设计如下:
CREATE PROCEDURE oldCursor(out oldName TEXT,in domainName varchar(50),in tableName varchar(50))
BEGIN
-- 定义变量
DECLARE tmpName TEXT default '';
DECLARE allName TEXT default '';
DECLARE amount int(11) DEFAULT 0;
-- 两个变量用于接收传入的值 并且在传入的值中处理预编译的sql
@sysName = domainName;
@listName = tableName;
-- 希望处理的效果是select COLUMN_NAME from information_schema.COLUMNS where table_name = 'tbl' and table_schema = 'date';
set @curlName = concat('select COLUMN_NAME from information_schema.COLUMNS where table_name = ''',@listName,''' and table_schema = ''',@sysName,'''');
-- 然后我用预编译的方式线处理curlNamesql语句
prepare stmt from @curlName;
execute stmt;
set @ee = stme;
-- 根据获取的编译好的sql 放到游标中处理-
DECLARE curl CURSOR FOR @ee;
-- 申明 循环操作 游标
DECLARE continue HANDLER FOR SQLSTATE '02000' set tmpname = null;
OPEN curl;
FETCH curl into tmpName;
WHILE(tmpname is not null)DO
set tmpName = CONCAT(tmpName,',OLD.');
set allName = CONCAT(allName,tmpName);
set amount=amount+1;
FETCH curl into tmpName;
end WHILE;
CLOSE curl;
set allName = substring_index(allName,',OLD.',amount);
set oldName = concat('OLD.',allName);
-- 解除资源
DEALLOCATE prepare stmt;
END;


结果提示编译错误;
[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 'DECLARE curl CURSOR FOR @ee;
-- 申明 循环操作 游标
DECLARE cont' at line 14

想知道我语法的问题,还是mysql处理的问题。如果可以附上如何处理的思路更好了 感激。!
...全文
756 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZXYperseverance 2018-03-13
  • 打赏
  • 举报
回复
CREATE PROCEDURE oldCursor(out oldName TEXT,in domainName varchar(50),in tableName varchar(50)) BEGIN -- 定义变量 DECLARE tmpName TEXT default ''; DECLARE allName TEXT default ''; DECLARE amount int(11) DEFAULT 0; DECLARE curl CURSOR FOR select COLUMN_NAME from information_schema.COLUMNS where table_name = domainName and table_schema = domainName; -- 申明 循环操作 游标 DECLARE continue HANDLER FOR SQLSTATE '02000' set tmpname = null; OPEN curl; FETCH curl into tmpName; WHILE(tmpname is not null)DO set tmpName = CONCAT(tmpName,',OLD.'); set allName = CONCAT(allName,tmpName); set amount=amount+1; FETCH curl into tmpName; end WHILE; CLOSE curl; set allName = substring_index(allName,',OLD.',amount); set oldName = concat('OLD.',allName); -- llocate prepare stmt; END; 直接把传进来的变量,用游标遍历不就行了,为啥要先整一个预处理那么麻烦呢?
Main_csdn_String 2018-03-13
  • 打赏
  • 举报
回复
引用 7 楼 qq_39498229 的回复:
我觉得楼主的方法还行
我是一个标点符号写错了。就问你尴尬吗。
qq_39498229 2018-03-12
  • 打赏
  • 举报
回复
我觉得楼主的方法还行
Main_csdn_String 2018-03-08
  • 打赏
  • 举报
回复
DECLARE curl CURSOR FOR @ee; 主要是想把这一块做动态的处理 。 可是这个动态总是处理不出来 闹心
Main_csdn_String 2018-03-08
  • 打赏
  • 举报
回复
标题没吸引力 快来人啊
Main_csdn_String 2018-03-08
  • 打赏
  • 举报
回复
select * from Temporary__view; 不说了 -又是我一个人慢慢解出来。每次发个帖子 结果没人回复我的时候 我就找问题。。虽然很低级的错误
Main_csdn_String 2018-03-08
  • 打赏
  • 举报
回复
[Err] 1054 - Unknown column 'Temporary__view' in 'field list' DROP VIEW IF EXISTS Temporary_view; CREATE VIEW Temporary_view(COLUMN_NAME) as select COLUMN_NAME FROM information_schema.`COLUMNS` where table_name='tbl_ne' and table_schema = 'simservers' ; select Temporary__view; 我创建一个视图,在视图处理的时候 发现没办法select处理
Main_csdn_String 2018-03-08
  • 打赏
  • 举报
回复
补充内容: 后面发现从语法上来讲DECLARE cur CURSOR for语句必须写在SET @sqlstr前面,这就意味着不能通过先执行一条动态语句根据结果拼凑游标的内容 所以创建mysql视图进行处理 在使用视图的时候 发现每次只能填写需要的进行处理 无奈
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

57,065

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧