mysql存储过程中like用法

  1. CREATE PROCEDURE `proc_init_tagsData`()
  2. begin
  3. DECLARE  v_keyword varchar(30);
  4. DECLARE  v_tag_id int default -1;
  5. DECLARE  v_done int;
  6. DECLARE v_count int default 0;
  7. -- 定义游标
  8. DECLARE rs_cursor CURSOR FOR select keyword from t_keyword where s_flag=1 order by id limit 15;
  9. DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done=1;
  10. open rs_cursor;
  11. cursor_loop:loop
  12. FETCH rs_cursor into v_keyword; -- 取数据
  13. if(v_count<15)  then
  14. insert into t_tag (name)values(v_keyword);
  15. set v_tag_id = LAST_INSERT_ID();
  16. -- 关键是like CONCAT(‘%‘,v_keyword,‘%‘); 这里的用法
  17. insert into tbl_sm_tag  (tag_id,soft_id) select v_tag_id,id from sm where soft_name like CONCAT(‘%‘,v_keyword,‘%‘);
  18. end if;
  19. set v_count = v_count + 1;
  20. if v_done=1 then
  21. leave cursor_loop;
  22. end if;
  23. end loop cursor_loop;
  24. close rs_cursor;
时间: 2024-10-20 21:03:45

mysql存储过程中like用法的相关文章

MySQL 存储过程CASE语句用法

MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句.下面讲讲MySQL 存储过程CASE语句用法. 1,CASE语法结构 CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE; 2,CASE应用实例 DELIMITER

Mysql存储过程中使用cursor

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

mysql存储过程中使用事务

1 DROP PROCEDURE IF EXISTS test_sp1 2 CREATE PROCEDURE test_sp1( ) 3 BEGIN 4 DECLARE t_error INTEGER DEFAULT 0; 5 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 6 7 START TRANSACTION; 8 INSERT INTO test VALUES(NULL, 'test sql 001'); 9 INSER

mysql -- 存储过程中 declare 和 set 定义变量的区别

mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:DECLARE var1  INT DEFAULT 0;  主要用在存储过程中,或者是给存储传参数中. 两者的区别是:在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL.而会话变量(即@开头的变量)则不

MySQL存储过程中的3种循环

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了. 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO 下面首先使用第一种循环编写一个例子. mysql> create procedure pro10() -> begin ->

mysql 存储过程中使用游标中使用临时表可以替代数组效果

mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在当前连接情况下, TEMPORARY 表才是可见的.当连接关闭时, TEMPORARY 表被自动取消.必须拥有 create temporary table 权限,才能创建临时表.可以通过指定 engine = memory; 来指定创建内存临时表. 先建立要用的数据表及数据: drop table

mysql存储过程中in、out、inout参数使用实际案例

1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)//为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了./**案例功能:求1-n的和开发者:徐守威时间:2016-08-13*/delimiter $create procedure p1(in n int)begin declare total int default 0; declare num int default 0; while num < n 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.怎么解决低版本的问题?可以使用执行动态sql语句,把整个sql语句传给存储过程.静态sql语句,编译的时候是sql的语句结构就已经确定下

mysql存储过程中 乱码问题解决办法

中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure中后,就无法插入汉字了.在客户端软件中插入的汉字总是为乱码,英文和数字没问题.3.如果在jdbc中调用这个Procedure总是报错: 在查阅了很多相关资料后,发现只需要改动procedure的参数的定义就OK了,改动为:在varchar参数后面加入: character set 指定编码.由于服务