MySQL中的 DELIMITER $$


开发给了1个存储过程的脚本,说是从其他库上导出来的,现在创建报错:

  1. check the manual that corresponds to your MySQL server version for the right syntax to use near \'\' at line 3

在本地测试,source 2.sql ,发现全是这些莫名其妙的错误。发现是脚本中有多行,以分号结尾。MySQL默认的行分隔符是 分号,遇到分号,就执行前面一段语句。

脚本中有多行,我们希望不按照分号来一句一句执行,希望一段代码作为一个整体执行。
在脚本最前面加上 delimiter $$

执行成功。


点击(此处)折叠或打开

  1. DELIMITER $$
  2. CREATE PROCEDURE `test`(in iv_date varchar(8),in iv_table_name varchar(50))
  3. begin
  4. declare vi_task_id int;
  5. declare vv_task_name varchar(50);
  6. declare vv_table_name varchar(50);
  7. declare vv_task_pos varchar(50);
  8. declare vv_sql varchar(500);
  9. declare vi_result int;
  10. declare vi_chk_flag int;
  11. declare vi_data_count int;
  12. declare vv_partition_name varchar(30);
  13.  /** * @description 初始化分区名 */
  14. set vv_partition_name = upper(concat(\'p_\',iv_date));

  15.  /** * @description 查询当前周期对应表分区是否有创建 */
  16. select count(1) into vi_chk_flag from information_schema.partitions ta where ta.table_name = upper(iv_table_name) and ta.partition_name = vv_partition_name;
  17.  /*select vi_chk_flag;*/

  18.  /** * @description 如果分区已经存在 */
  19. if vi_chk_flag > 0 then

  20. select table_rows into vi_data_count from information_schema.partitions ta where ta.table_name = upper(iv_table_name) and ta.partition_name = vv_partition_name;
  21. if vi_data_count > 0 then
  22. set @vv_sql = concat(\'alter table \', upper(iv_table_name), \' truncate partition \', upper(vv_partition_name));
  23. prepare stmt from @vv_sql;
  24. execute stmt;
  25. deallocate prepare stmt;
  26. commit;

  27. end if;
  28. else
  29.  /** * @description 新建分区 */
  30. set @vv_sql = concat(\'alter table \', upper(iv_table_name), \' add partition (partition \', upper(vv_partition_name), \' values in (\', iv_date, \'))\');
  31.    /*select @vv_sql;*/
  32. prepare stmt from @vv_sql;
  33. execute stmt;
  34. deallocate prepare stmt;
  35. commit;

  36. end if;

  37. /** end */
  38. end

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29071259/viewspace-1369112/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29071259/viewspace-1369112/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值