MySQL存储过程中能不能用IFmysql exists用法(SELECT * from form__rmms_pofm_fundsmanage) THEN ...END

MySQL带参数的存储过程小例子 - IT徐胖子的专栏
- 博客频道 - CSDN.NET
8905人阅读
存储过程P_GET_CLASS_NAME是根据输入的班级号判断班级名称
存储过程P_INSERT_STUDENT是接收输入的学生信息,最终将信息插入学生表。
DROP PROCEDURE IF EXISTS `P_GET_CLASS_NAME`;
CREATE PROCEDURE P_GET_CLASS_NAME(IN ID int,OUT NAME VARCHAR(50))
IF(ID = 1) THEN
SET NAME = '一班';
IF(ID = 2) THEN
SET NAME = '二班';
DROP PROCEDURE IF EXISTS `P_INSERT_STUDENT`;
CREATE PROCEDURE P_INSERT_STUDENT(IN ID INT,IN NAME VARCHAR(10),IN CLASSNO INT,IN BIRTH DATETIME)
SET @ID = ID;
SET @NAME = NAME;
SET @CLASSNO = CLASSNO;
SET @BIRTH = BIRTH;
SET @CLASSNAME = NULL;
CALL P_GET_CLASS_NAME(@CLASSNO,@CLASSNAME);
SET @insertSql = CONCAT('INSERT INTO TBL_STUDENT VALUES(?,?,?,?)');
PREPARE stmtinsert FROM @insertS
EXECUTE stmtinsert USING @ID,@NAME,@CLASSNAME,@BIRTH;
DEALLOCATE PREPARE
CALL P_INSERT_STUDENT(1,'xy',1,' 10:20:01');
在第二个存储过程中
①利用SET声明了参数,调用了第一个存储过程
②在第一个存储过程中的NAME参数是输出参数,所以@CLASSNAME这个参数在调用完第一个过程后就被附值
③最终利用CONCAT拼接SQL语句并传入参数执行SQL语句
CALL P_INSERT_STUDENT(1,'xy',1,' 10:20:01');调用存储过程
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:928397次
积分:15223
积分:15223
排名:第261名
原创:499篇
转载:357篇
评论:165条
文章:16篇
阅读:43535
本人小技术员一枚,踏踏实实做人,认认真真做技术,无其他不切实际的想法。本博客文章与本人的工作单位没有任何关系,只是大学时期或平时看书对IT常用技术的小总结,不能保证全部博文正确或最优,需要读者自己判断。本博客所有文章仅供学习交流,绝不能用作商业用途,绝对不可作为除学习之外的任何用途。本博客的所有内容仅供学习和测试,对任何法律问题及风险不承担任何责任。若无说明,文章为本人原创,对于本人的原创文章,转载必须注明出处和原文链接。本博主上传的学习资源同样只能作为学习用途,绝不能作为除学习之外的任何用途。对于未遵守本博主声明的情形,本博主保留诉诸法律的权利。十分欢迎和期待与IT技术以及生活的爱好者交流学习。
(17)(13)(8)(8)(10)(31)(17)(14)(15)(6)(21)(15)(4)(10)(19)(12)(8)(8)(40)(56)(33)(17)(33)(24)(13)(24)(32)(45)(119)(157)(28)mysql存储过程能不能输入多个参数的? 如果能。。请给一个例子。谢谢_百度知道
mysql存储过程能不能输入多个参数的? 如果能。。请给一个例子。谢谢
-&&#47:00 || 192;/-& FROM table1-&gt:mysql&gt:00; BEGIN-&&#47.01 sec)mysql&gt解决如下.168; call name2(&#39.1.106 |
02; / where time1&-& DELIMITER &#47, &#39, dt2 DATETIME)-&;);=dt1 and time1 &lt, 0 rows affected (0.105 |
03;'= dt2;+---------------+---------------------+| ip | time1 |+---------------+---------------------+| 192; CREATE PROCEDURE name2(dt1 DATETIME;mysql&Query OK; END; &#47.168.1:00; SELECT *-&&#39
按默认排序
其他2条回答
.t$pdno Like &#39:Begin';)
fromdate V&#39.t$prdt+ interval &#39:ss &#39:=&#39.t$osta=1 and t1;'end BCS_ERPdataQuery_=to_date(&#39,'8&#39,''yyyy-mm-dd hh24;yyyy-mm-dd hh24; hour&lt,
v_company VT10%&#39多个参数的:create or replace procedure BCS_ERPdataQuery_tu( p_cursor IN OUT
and t1;=to_date(&#39,
todate Varchar)isstr Varchar2(4000);'||fromdate||'')'8''''&#39.ttisfc001'&#39:||todate||&#39:ss '''||v_company||'''
Open p_cursor For
str.cursorT hour&'select * from baan.t$prdt+ interval ''@BAAN26
where t1:=''&#39
百度就有哦:
您可能关注的推广
存储过程的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您所在的位置: &
拆表用的MySQL存储过程
拆表用的MySQL存储过程
MySQL存储过程可以实现许多我们需要的功能,下文介绍的存储过程用于拆表,如果您之前遇到过类似的问题,不妨一看。
MySQL存储过程用途很广泛,下面就为您介绍拆表用的MySQL存储过程,希望对您学习MySQL存储过程方面能够有所帮助。
mysql表或分表的数据达到一定量(也许是800w或者1000w..)这个时候非常需要再分表,简单的办法是直接写
--假设根据user_id分表,分成64张
insert&into&table_new_0000&select&*&from&table_old&where&mod(user_id,64)=0; &insert&into&table_new_0001&select&*&from&table_old&where&mod(user_id,64)=1; &... &
一共64条sql,OK 搞定。& 但是这个一张表被全表扫描了64次,做的无用功比较多,而且导致停机时间比较长。
虽然MySQL存储过程不是很熟,稍稍学习了下写了两个脚本,一个全量+一个增量脚本完成表的拆分。
线上库也实践了下,8个分表,每个分表1000W记录拆分到64个分表。
全量 时间 150分钟,全量的时候几个分表可以一起跑,我是同时跑3个分表
增量 时间 每个分表4分钟 4个一起跑,一共是 8分钟搞定。 这样停机时间加上应用的发布一共只需要20分钟就可以搞定了。
###################
delimeter //
-----------
--- 全量脚本:
CREATE&PROCEDURE&&sp_xf_move_item() &begin &declare&v_exit&int&default&0; &declare&v_spid& &declare&v_id& &declare&i&int&default&0; &declare&c_table& &
--定义游标(要分拆的表,定义一个数量的截止时间)
declare&c_ids&cursor&for&select&id,user_id&from&item_records_0000&where&gmt_modified&&'&00:00:00'; &declare&&continue&handler&for&not&found&set&v_exit=1; &open&c_ &repeat &
--将需要的值装入变量
fetch&c_ids&into&v_id,v_ &if&v_exit&=&0&then &set&@vv_id&=&v_ &
--根据取模字段获取数据存在的表
select&mod(v_spid,64)&into&c_ &
--组装动态sql
SET&@SQL_CONTEXT&= &CONCAT('insert&into&item_record_', &LPAD(c_table,&4,&0), &'&select&*&from&item_records_0000&where&id&=&?'); &&PREPARE&STMT&FROM&@SQL_CONTEXT; &--执行sql &EXECUTE&STMT&using&@vv_ &DEALLOCATE&PREPARE&STMT; &end& &set&ii=i+1; &&
--100条提交一次,以提高效率,记得执行存储过程前设置auto_commit
if&mod(i,100)=0&then& &end& &until&v_exit=1&end& &close&c_ & & &// &&----------- &set&auto_commit=0; &call&&sp_xf_move_item(); &&####&增量脚本&###### &&CREATE&PROCEDURE&sp_xf_add_item() &begin &declare&v_exit&int&default&0; &declare&v_spid& &declare&v_id& &declare&i&int&default&0; &declare&c_table& &declare&c_ids&cursor&for&select&id,supplier_id&from&item_records_0000&where&gmt_modified&=&'&00:00:00'; &declare&&continue&handler&for&not&found&set&v_exit=1; &open&c_ &repeat &&fetch&c_ids&into&v_id,v_ &if&v_exit&=&0&then &set&@vv_id&=&v_ &set&@v_row=0; &select&mod(v_spid,64)&into&c_ &&
--判断数据是否已经存在
SET&@SQL_C&= &CONCAT('select&count(*)&into&@v_row&from&item_record_', &LPAD(c_table,&4,&0), &'&where&id&=&?'); &&PREPARE&STMT_C&FROM&@SQL_C; &EXECUTE&STMT_C&using&@vv_ &DEALLOCATE&PREPARE&STMT_C;&&&&&&&&&&&&&&&&&&&&&&& &&SET&@SQL_INSERT&= &CONCAT('insert&into&bbc_item_record_', &LPAD(c_table,&4,&0), &'&select&*&from&item_records_0000&where&id&=&?'); &&PREPARE&STMT_I&FROM&@SQL_INSERT;&&&&&&&&& &&SET&@SQL_DELETE&= &CONCAT('DELETE&FROM&bbc_item_record_', &LPAD(c_table,&4,&0), &'&where&id&=&?'); &PREPARE&STMT_D&FROM&@SQL_DELETE;&&&&& &
--如果数据已经存在,则先delete在insert&&&&&&&&&&&&&
if&@v_row0&then& &&EXECUTE&STMT_D&using&@vv_ &DEALLOCATE&PREPARE&STMT_D; &&end& &EXECUTE&STMT_I&using&@vv_ &DEALLOCATE&PREPARE&STMT_I;&&&&&&& &&end& &set&ii=i+1; &if&mod(i,100)=0&then& &end& &until&v_exit=1&end& &close&c_ & & &// &&------- &&
如果全量和增量之间的时间拖的比较长,那么可以设置时间,多做几次增量已缩短最后的停机时间,你懂的。。。
call sp_xf_add_item()//
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
MariaDB是一个向后兼容、替代MySQL的数据库服务器。它包含所有主
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
Oracle数据库的查询优化,是DBA们需要考虑的问题。在
Oracle数据库的配置工作十分复杂,不光涉及到存储数据
Infobright是一个与MySQL集成的开源数据仓库(Data Wa
SQL Server 2005微软官方权威参考手册。
是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作。
51CTO旗下网站Mysql存储过程改成SQLServer的_百度知道
Mysql存储过程改成SQLServer的
实现的是类似Oracle Sequence 的效果------------------------------------------------------------------------DROP TABLE IF EXISTSCREATE TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 1,PRIMARY KEY (name)) ENGINE=InnoDB;INSERT INTO sequence VALUES ('MovieSeq',1,1);DROP FUNCTION IF EXISTSDELIMITER $CREATE FUNCTION currval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN
DECLARE value INTEGER;
SET value =憨丁封股莩噶凤拴脯茎 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_
RETURNEND$DELIMITER ;----------------------------------------------------DROP FUNCTION IF EXISTSDELIMITER $CREATE FUNCTION nextval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN
UPDATE sequence
current_value = current_value + increment
WHERE name = seq_
RETURN currval(seq_name);END$DELIMITER ;------------------------------------------------------------------------------------------DROP FUNCTION IF EXISTSDELIMITER $CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERCONTAINS SQLBEGIN
UPDATE sequence
current_value = value
WHERE name = seq_
RETURN currval(seq_name);END$DELIMITER ;
提问者采纳
DROP TABLE IF EXISTSCREATE TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT(1),PRIMARY KEY (name)) ENGINE=InnoDB;INSERT INTO sequence VALUES ('MovieSeq',1,1);DROP FUNCTION IF EXISTSCREATE FUNCTION currval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_
RETURNEND------------------------------------------憨丁封股莩噶凤拴脯茎----------DROP FUNCTION IF EXISTSCREATE FUNCTION nextval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN
UPDATE sequence
current_value = current_value + increment
WHERE name = seq_
RETURN currval(seq_name);ENDDELIMITER ;------------------------------------------------------------------------------------------DROP FUNCTION IF EXISTSCREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERCONTAINS SQLBEGIN
UPDATE sequence
current_value = value
WHERE name = seq_
RETURN currval(seq_name);END
提问者评价
其他类似问题
按默认排序
其他1条回答
CREATE TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 1,PRIMARY KEY (name))INSERT憨丁封股莩噶凤拴脯茎 INTO sequence VALUES ('MovieSeq',1,1);其实没有多少不同的
其他类似问题
您可能关注的推广
存储过程的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 mysql exists用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信