添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
冷冷的板凳  ·  jmeter - ...·  1 年前    · 
想出国的钱包  ·  list的contains方法 - ...·  2 年前    · 
DROP PROCEDURE IF EXISTS `PD_VERIFICATION_TINDEXMIK30`$$ CREATE DEFINER=`root`@`%` PROCEDURE `PD_VERIFICATION_TINDEXMIK30`() BEGIN -- -------------------------------临时变量------------------------------------------- DECLARE TEMP_YEAR VARCHAR(10); DECLARE TEMP_MONTH VARCHAR(10); DECLARE TEMP_TABLE_NAME VARCHAR(100); DECLARE TEMP_BEGIN_TIME VARCHAR(30); DECLARE TEMP_END_TIME VARCHAR(30); DECLARE TEMP_SQL VARCHAR(1000); -- -------------------------------中间变量------------------------------------------- DECLARE F_CODE VARCHAR(10); -- 股票代码 DECLARE F_CLOSE DECIMAL(18,3); DECLARE F_VOLUME DECIMAL(18,3); DECLARE F_AMOUNT DECIMAL(18,3); DECLARE F_OPEN DECIMAL(18,3); DECLARE F_HIGH DECIMAL(18,3); DECLARE F_LOW DECIMAL(18,3); DECLARE F_TIME INT; DECLARE F_SEQ BIGINT; DECLARE ERROE_MSG VARCHAR(500); -- ------------------------------游标相关定义---------------------------------------- -- 定义游标遍历时,作为判断是否遍历完全部记录的标记 DECLARE no_more_departments INTEGER DEFAULT 0; -- 定义游标名字为C_RESULT DECLARE C_RESULT CURSOR FOR SELECT * FROM tmp_index30_table; -- 声明当游标遍历完全部记录后将标志变量置成某个值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1; -- ---------------------------------异常处理---------------------------------------- -- 记录错误日志 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN SET @err = fn_get_error(); INSERT INTO act_records(act,actTime,actDesc,flag) SELECT 'PD_VERIFICATION_TINDEXMIK30',NOW(),@err,1; SET TEMP_YEAR=DATE_FORMAT( NOW(), '%Y'); SET TEMP_MONTH=DATE_FORMAT( NOW(), '%m'); SET TEMP_TABLE_NAME=CONCAT('db.t_mik_index_30_',TEMP_YEAR,TEMP_MONTH); SET TEMP_BEGIN_TIME=CONCAT(DATE_FORMAT( NOW(), '%Y-%m-%d'),' 00:00:00'); SET TEMP_END_TIME=CONCAT(DATE_FORMAT( NOW(), '%Y-%m-%d'),' 23:59:59'); SET TEMP_SQL=CONCAT(' Create TEMPORARY Table tmp_index30_table( SELECT f_code,F_CLOSE,F_VOLUME,F_AMOUNT,F_OPEN,F_HIGH,F_LOW,f_time,f_SEQ FROM ',TEMP_TABLE_NAME, ' where f_update_time >=''',TEMP_BEGIN_TIME,''' AND f_update_time<=''' ,TEMP_END_TIME,''' order by f_date , f_time)'); -- 执行动态sql SET @sql=TEMP_SQL; PREPARE stmt FROM @sql; -- 预处理需要执行的动态SQL,其中stmt是一个变量 EXECUTE stmt; -- 执行SQL语句 DEALLOCATE PREPARE stmt; -- 释放掉预处理段 OPEN C_RESULT; REPEAT FETCH C_RESULT INTO f_code,F_CLOSE,F_VOLUME,F_AMOUNT,F_OPEN,F_HIGH,F_LOW,f_time,f_SEQ ; SET ERROE_MSG=''; IF F_CLOSE = NULL OR F_CLOSE = 0 THEN SET ERROE_MSG=CONCAT('F_CLOSE 的值为' ,F_CLOSE); END IF; IF ERROE_MSG <> '' THEN INSERT INTO verification_records (info_type,table_name,codes,f_seq,error_msg,create_time ) VALUES('1',TEMP_TABLE_NAME,F_CODE,f_SEQ,ERROE_MSG,NOW()); END IF; UNTIL no_more_departments END REPEAT; -- 结束循环 CLOSE C_RESULT; DROP TEMPORARY TABLE tmp_index30_table; -- 删除临时表 END$$ DELIMITER ; 在 存储过程 中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。 1、declare定义的变量类似java类中的局部变量,仅在类中生效。即只在 存储过程 中的begin和end之间生效。 2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被 调用 存储过程 或者代码之间共享数据。如何理解呢?可以看下面这个简单 例子 ,很好理解。  (1)先执行下面脚本,创建一个 存储过程 ,分别有declare形式的变量和@set形式的变量 DROP PROCEDURE 数据库对象表时存储和操作数据的逻辑结构,而数据库对象 存储过程 和函数,则是用来实现将一组关于表操作的sql语句当作一个整体来执行。在数据库系统中,当 调用 存储过程 和函数时,则会执行这些对象中所设置的sql语句组,从而实现相应功能。 1. 为什么使用 存储过程 和函数的操作      有时针对表的一个 完整 操作往往不是单条sql语句就可以实现的,而是需要一组sql语句来实现。在具体应用当中,一个 完整 的操作会包含多条sql语句,在执行过程中需要根据前面sql语句的执行结果有选择地执行后面sql语句。 存储过程 和函数可以简单理解为一条或多条sql语句的集合。 存储过程 和函数就是事先经过编译并存储在数 在 MySQL 中, 存储过程 或函数中的查询有时会返回多条记录,而使用简单的 SELECT 语句,没有办法得到第一行、下一行或前十行的数据,这时可以使用 游标 来逐条读取查询结果集中的记录。 游标 在部分资料中也被称为光标。 MySQL 系列—-创建存储函数、 游标 的使用创建存储函数输入任意三个数,结果输出它们的最小值 调用 函数使用 游标 使用 游标 从表中查询信息从sc表中查询成绩高于80分的学生信息有帮助的别忘了点个赞再走哦!! 本期是 MySQL 系列哦~~ 主要用两个 例子 跟大家分别展示创建存储函数以及 游标 的使用 创建存储函数 存储函数不同于 存储过程 ,它有返回值,需要有RETURN语句 输入任意三个数,结果输出它们的最小值 DELIMITER $$ ## 创建存储函数smin CREATE FUNCTION `sj`.`smin`(i INT,j INT,k INT) RETURNS INT BEGIN DECLARE mysql 存储过程 中,变量直接拼接在执行sql上会把变量解析成 '变量执行',比如: DECLARE v_conditionVARCHAR(4) DEFAULT 'id=1'; select * from t wherev_condition 此时不会报错,实际执行的sql是select * from t where 'id=1' 所以需要 动态sql 的实现如下,这里 动态SQL 的生成说明如下: 使用concat拼接,将变量传值进去: set pSql = concat('update... Chapter5 MySQL 存储过程 、事务、 游标 、动态执行SQL 文章目录Chapter5 MySQL 存储过程 、事务、 游标 、动态执行SQL一、 存储过程 二、事务三、 游标 四、动态执行SQL 一、 存储过程 三、 游标 四、动态执行SQL 编写一个 存储过程 ,该过程将 游标 打开到表,然后遍历所有记录.在迭代过程中,基于第一个 游标 的结果创建一个动态查询.需要在 动态sql 上打开 游标 ,,并且将该 存储过程 拆开成两个 存储过程 ,通过外层的 调用 内层的 存储过程 。所以CURSOR FOR 后面跟的Sql中不能拼接变量。内层循环所借助的Cursor是动态的结果集。 参数IN表示输入的参数, 存储过程 只是读取这个参数的值。如果没有定义参数种类,默认就是IN,表示输入参数。OUT表示输出的参数, 存储过程 在执行的过程中,把某个计算结果值赋给这个参数,执行完成之后, 调用 这个 存储过程 的客户端或者应用程序就可以读取这个参数返回的值了。INOUT表示这个参数既可以作为输入参数,又可以作为输出参数使用除了定义参数种类,还要对参数的数据类型进行定义,上面的transdate的数据类型是TEXT。这个参数的用处是告诉 存储过程 ,我要处理的是哪一天的数据。... 从语法上来讲DECLARE cur CURSOR for语句必须写在SET @sqlstr前面,这就意味着不能通过先执行一条动态语句根据结果拼凑 游标 的内容,而且 游标 在定义的时候也没有参数的概念,而是将定义的结构完全当作一个字符串直接处理,不会做任何的处理,也就是静态 游标 吧。关于dynamic cursor的内容官方有解释http://dev. mysql .com/doc/refman/5.6/en/... 直接在 存储过程 调用 :call 存储过程 名称(参数) 如果有返回值 call generatorAuthorCode(@c);   select @c into authorCode; 游标 使用: DECLARE  cur_name CURSOR FOR select field from table_name ; #我的理解 Mysql (8)— 游标 上一遍博客写了有关 存储过程 的语法知识 Mysql (7)--- 存储过程 游标 或许你在工作中很少用到,但用不到不代表不去了解它,但你真正需要它来解决问题的时候,再花时间去学习很可能会影响你的工作进度。 注意: MySQL 游标 只能用于 存储过程 (和函数)。 游标 主要用于交互式应用。 游标 是一个存储在 MySQL 服务器上的数据库查询,它不是一条select语...