mysql存储过程字符串参数
⑴ mysql 存储过程,如何把一个 字符串变成一个 整形数 比如 “33” 变成整数的33
convert(str, signed)
⑵ mysql数据库中字符串拼接问题
mysql不能直接运行动态sql语句的,但是可以写在存储过程中,然后调用过程执行,具体如下:
(1)定义存储过程,示例:
CREATEDEFINER=`root`@`localhost`PROCEDURE`query_extra_table`(table_indexvarchar(255))
BEGIN
SET@sql=concat("select*fromtbl_order_",table_index);
PREPAREstmtFROM@sql;
EXECUTEstmt;
END
(2)调用存储过程:
CALLquery_extra_table('483')
⑶ mysql存储过程中分支语句有哪些
存储过程:
create procere p()
begin
/*thi procere does nothing*/
end;
1.参数
Parameters 参数
让我们更进一步的研究怎么在存储过程中定义参数1. CREATE PROCEDURE p5
() ...
2. CREATE PROCEDURE p5
([IN] name data-type) ...
3. CREATE PROCEDURE p5
(OUT name data-type) ...
4. CREATE PROCEDURE p5
(INOUT name data-type) ...
2.Conditions and if-then-else 条件式和 if-then-else
3.Loops 循环语句
WHILE ... END WHILE
LOOP ... END LOOP
REPEAT ... END REPEAT
GOTO
4.DECLARE HANDLER syntax 声明异常处理的语法
DECLARE
{ EXIT | CONTINUE }
HANDLER FOR
{ error-number | { SQLSTATE error-string } | condition }
SQL statement
5.Cursors 游标
游标实现功能摘要:
DECLARE cursor-name CURSOR FOR SELECT ...;
OPEN cursor-name;
FETCH cursor-name INTO variable [, variable];
CLOSE cursor-name;
已现经在可我以们完开成始基着本眼的游事标了务如。声虽明然游我标们,的打存开储游过标程,中从的游游标标里语法读取还,并关没闭有完游整标。
6.Functions 函数
Summary:
摘要 CREATE FUNCTION
Limitations of functions
函数的限制
我们已经很清楚可以在存储过程中使用的元素了。下面我要讲的是前面没有提到的函数。
⑷ 创建存储过程sql语句
1)过程名
存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。
需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。
2)过程参数
存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的MySQL数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有1个或多个参数。
MySQL存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用IN、OUT和INOUT三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。
⑸ mysql存储过程一个参数有多个逗号分割
这个应该可以使用字符串拼接,你是不是这样写存储过程:
create procere p_proc(var_in int)
begin
delete from [tableName] where [colName] in (var_in);
end
然后又这样调用:
call p_proc(1, 2, 3);
这样肯定不行,那么你可以这样:
create procere p_proc(var_in varchar(5000))
begin
set @sql = concat("delete from [tableName] where [colName] in (", var_in, ")");
prepare stmt_exe_sql from @sql;
execute stmt_exe_sql;
deallocate prepare stmt_exe_sql;
end
这样就相当于把(1, 2, 3)拼接成语句"delete from [tableName] where [colName] in (1, 2, 3)", 然后执行,就可以删除了。
⑹ Mysql中存储过程或函数 如何将逗号分隔的字符串倒序输出 如 :4531,8651,3256 变为: 3256,8651,4531
DELIMITER//
DROPFUNCTIONReverseWordBy//
CREATEFUNCTIONReverseWordBy(pOldValTINYTEXT,pDivCharCHAR(1))
RETURNSTINYTEXT
BEGIN
/**预期结果.**/
DECLAREvResultTINYTEXT;
--当前逗号的位置.
DECLAREvIndexINT;
--前一个逗号的位置.
DECLAREvPrevIndexINT;
--查询第一个逗号的位置.
SETvIndex=INSTR(pOldVal,pDivChar);
IFvIndex=0THEN
--参数中没有逗号,直接返回.
RETURNpOldVal;
ENDIF;
--初始化情况,前一个逗号不存在.
SETvPrevIndex=0;
--初始化结果为空白字符.
SETvResult='';
--循环处理。
WHILEvIndex>0DO
--设置结果=本次查询的结果,以前的查询结果.
SETvResult=CONCAT(SUBSTRING(pOldVal,vPrevIndex+1,(vIndex-vPrevIndex-1)),pDivChar,vResult);
--前一个逗号的位置=当前逗号的位置
SETvPrevIndex=vIndex;
--查询下一个逗号的位置.
SETvIndex=LOCATE(pDivChar,pOldVal,vPrevIndex+1);
ENDWHILE;
--最后追加最后一组数据.
SETvResult=CONCAT(SUBSTRING(pOldVal,vPrevIndex+1),pDivChar,vResult);
--清除掉最后一个逗号.
SETvResult=LEFT(vResult,LENGTH(vResult)-1);
--返回结果.
RETURNvResult;
END;
//
DELIMITER;
SELECTReverseWordBy('4531,8651,3256',',')A;
SELECTReverseWordBy('1,12,123,1234,12345,123456',',')B;
输出结果:
mysql>SELECTReverseWordBy('4531,8651,3256',',')A;
+----------------+
|A|
+----------------+
|3256,8651,4531|
+----------------+
1rowinset(0.00sec)
mysql>
mysql>SELECTReverseWordBy('1,12,123,1234,12345,123456',',')B;
+----------------------------+
|B|
+----------------------------+
|123456,12345,1234,123,12,1|
+----------------------------+
1rowinset(0.00sec)
⑺ mysql存储过程一个参数有多个逗号分割
这个应该可以使纯笑用字符串拼接,你是不是这样写存储陆昌过程:
create procere p_proc(var_in int)
begin
delete from [tableName] where [colName] in (var_in);
end
然后又这样调用做悉含:
call p_proc(1, 2, 3);
这样肯定不行,那么你可以这样:
create procere p_proc(var_in varchar(5000))
begin
set @sql = concat("delete from [tableName] where [colName] in (", var_in, ")");
prepare stmt_exe_sql from @sql;
execute stmt_exe_sql;
deallocate prepare stmt_exe_sql;
end
这样就相当于把(1, 2, 3)拼接成语句"delete from [tableName] where [colName] in (1, 2, 3)", 然后执行,就可以删除了。