mysql 批处理sql文件_mysql批处理sql文件

一、mysql中的delimiter

我们一般在写sql脚本时,是不会用到delimiter的,一般情况下也用不到他具体的作用。delimiter的作用:告诉MySQL解释器,该段命令是否已经结束了,MySQL数据库是否可以执行了。我们一般是以分号;结尾一条sql,而delimiter的默认值也是;。当我们在mysql命令行敲完一段sql语句之后,在加上分号点击回车就能执行这条sql。但是当我们需要输入一个存储过程的时候,命令行就不管用了?非也,此时就需要用到delimiter来定义结束标志。为什么要讲这段内容呢,因为我们使用批处理执行sql文件时都是在客户端用命令行执行的,一旦sql文件中包含存储过程或者函数之类的,就位报各种奇葩错误。

另外delimiter作用范围需要注意一下,他作用于客户端session级别,即你断开客户端之后下次再登录时又会恢复到默认值分号。

二、批处理语法与实例

总的批处理命令:

source C:/Users/dstn/Desktop/数据迁移/脚本/00-batch_operate.sql

实例:

现在有8个sql文件,里面包含了存储过程以及一般的sql语句,为了避免一个个单独执行,我们整理一个批处理文件。注意斜杠和乱码问题,斜杠就是/,乱码可以将客户端的编码调成utf-8。

-- 查看当前配置的编码

show variables like ‘character_set_%’;

-- 修改为utf8

set names utf8;

-- 等同于如下:

set character_set_client=utf8;

set character_set_results=utf8;

set character_set_connection=utf8;

用于执行批处理的文件:00-batch_operate.sql

delimiter $$

-- 可以打印相关的提示信息

select sysdate() as 1_application from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/1-application.sql

select sysdate() as 2_application_batch from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/2-application-batch.sql

select sysdate() as 3_tc_product from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/3-tc_product.sql

select sysdate() as 4_PRO_tc_product_queryattr from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/4-PRO_tc_product_queryattr.sql

select sysdate() as 5_PRO_tc_product_json from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/5-PRO_tc_product_json.sql

select sysdate() as 6_tc_intent_user from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/6-tc_intent_user.sql

select sysdate() as 7_product_cycle_status from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/7-product_cycle_status.sql

select sysdate() as 8_tc_log from dual $$

source C:/Users/dstn/Desktop/数据迁移/脚本/8-tc_log.sql

下面再举一个其中的sql文件:1-application.sql

DROP PROCEDURE IF EXISTS `ta_application_all`;

CREATE PROCEDURE `ta_application_all`(in productCodeTemp VARCHAR(20))

BEGIN

DECLARE applyCode VARCHAR(20);

DECLARE done INT DEFAULT FALSE;

DECLARE cur CURSOR FOR select distinct(appl_code) from tjs_dev.ta_application_detail WHERE `key` = 'productCode' and `VALUE` = productCodeTemp;

/**定义游标结束标志**/

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

LOOP_LABLE:loop

FETCH cur INTO applyCode;

if done THEN

LEAVE LOOP_LABLE;

END IF;

Insert into tjfae_dev.ta_application (APPL_CODE,APPL_NAME,TYPE,STAGE,`STATUS`,OPERATOR,MEMO,IS_DELETE,GMT_CREATE,GMT_MODIFY,EXCHANGE_ID)

select APPL_CODE,APPL_NAME,TYPE,STAGE,`STATUS`,OPERATOR,MEMO,IS_DELETE,GMT_CREATE,GMT_MODIFY,EXCHANGE_ID from tjs_dev.ta_application where APPL_CODE=applyCode;

end LOOP;

CLOSE cur;

END;

$$

f4c4e103566951298294743cd2ab84ee.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值