博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql创建存储过程
阅读量:6947 次
发布时间:2019-06-27

本文共 2197 字,大约阅读时间需要 7 分钟。

-- use d_youmitest; 将会把d_youmitest;作为整个数据库名称,空格+; 所以书写时注意习惯use d_youmitest--下面这行是个坑,而且不能带“;”,否则将“//;”作为整体;如果不加此--行,看到的效果是 declare 那几行的都将标识为红色包含错误。DELIMITER //create procedure sp_bind_card(p_cellphone varchar(16),p_name varchar(100),p_id_card varchar(50),p_bank_card_no varchar(50),p_channel_name varchar(100),p_bank_abbr varchar(16),out p_returnVal varchar(50))begin    declare user_id ,channel_account_id,bank_channel_info_id,account_id,channel_id bigint ;    -- 如sql异常,回滚事务并设置返回失败    DECLARE EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND begin ROLLBACK; set p_returnVal='fail'; end;    -- disable autocommit    set autocommit=0;    -- get user_id    select c_user_id into user_id from t_user where c_cellphone =p_cellphone;    -- get channel_id and bank_channel_info_id;注意多字段时into的用法    select t1.c_bank_channel_info_id ,t1.c_channel_id into bank_channel_info_id, channel_id    from t_bank_channel_info t1 join t_channel t2 on t1.c_channel_id=t2.c_channel_id    where t1.c_abbr=p_bank_abbr and t2.c_name=p_channel_name;    # begin trans    start transaction;        update t_user set c_name=p_name,c_card_id=p_id_card where c_user_id=user_id;        insert into t_account (c_user_id,c_bank_channel_info_id,c_bankcard_no,c_status,c_security_level)                values(user_id,bank_channel_info_id,p_bank_card_no,1,1);        select @@identity into account_id;        insert into t_channel_account(c_account_id,c_channel_id,c_is_active)values(account_id,channel_id,0);        commit;        set p_returnVal='success';end;//DELIMITER ;

1、delimiter使用:在 程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 “;”变为“//”。这就允许用在 程序体中的“;”定界符被传递到服务器而不是被mysql自己来解释。

2、方案二:将以上脚本放入到文件中,然后使用source 命令创建,eg:放到 vi data/testsql.sql文件中,在mysql命令行下输入

source /home/kuoren/data/test.sql。注意最后两行 ,尤其“//”的位置

备注:source 的缩写“.” ,则 source /home/kuoren/data/test.sql 等价 . /home/kuoren/data/test.sql

3、mysql变量:@@标示系统变量 如 @@identity;

@标示用户自定义全局变量;
declare varName varType default defaultValue 定义当前块变量。

4 ID自增设置,设置ID为 AUTO_INCREMENT;同时指定AUTO_INCREMENT=1.当在新增行时,虽然设置了AUTO_INCREMENT=1,但仍然不是从1开始增长,主要是由于在mysql中自增变量是位于内存中的,即便把表删除,其仍然不会恢复到1开始增长,eg :现在表A有三条记录,ID为3,Drop table 表A后,创建表A在新增记录,会从4增长,重启mysql服务也会遇到ID重复问题,就由此导致.

5、写连续mysql 语句时,注意;的使用

转载地址:http://vprnl.baihongyu.com/

你可能感兴趣的文章
mysql对vachar排序的问题
查看>>
ASCII和Unicode编码
查看>>
什么事宏病毒,宏病毒的判断方法 ,宏病毒的防治和清除
查看>>
实战CGLib系列之proxy篇(五):接口生成器InterfaceMaker
查看>>
高并发编程-09-读写锁ReentrantReadWriteLock
查看>>
算法题!大家可以贡献答案哦!
查看>>
此文是2013年应届生实习时,集中培训班的最后,个人写给大家的话
查看>>
BYOD大势所趋 但仍有挑战
查看>>
JVM致命错误日志(hs_err_pid.log)解读
查看>>
需要具备的技能
查看>>
一个老司机工程师整理的自动化测试资料
查看>>
单机环境搭建Postgres-XC开发测试环境
查看>>
三: 推荐系统
查看>>
PHP文件上传-单文件上传函数
查看>>
jvmtop 监控
查看>>
使用JMH进行并发测试
查看>>
关于服务器 SAN 和 SDS
查看>>
ASP.NET 如何做出简单的验证码
查看>>
我的友情链接
查看>>
Spring 转换 model 为 json 时增加属性
查看>>