mysql创建存储过程

-- 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 语句时,注意;的使用

时间: 2024-08-31 22:06:16

mysql创建存储过程的相关文章

mysql创建存储过程并在php中调用

今天web开发中遇到需要利用php调取mysql的存储过程的,研究了半天终于小有所成,下面将如何使用mysql创建存储过程以及如何使用php调用mysql的存储过程做个记录,以防忘记. 1.在PHPmyadmin中创建一个test1存储过程: create procedure test1(in a int) //create创建:procedure存储过程:test1是存储过程名还管有没有参数都得加上() begin //开始 select * from test where id=a;//这里

mysql 创建存储过程时,select语句 like中引用变量如何引用?

问题描述 mysql 创建存储过程时,select语句 like中引用变量如何引用? 附代码: delimiter// DROP PROCEDURE IF EXISTS M_DNAME // CREATE PROCEDURE M_DNAME (MONTH VARCHAR(2)) SELECT INCOME.CID,COUNT(*) COUNTS FROM INCOME WHERE TIME LIKE '______MONTH%'; // delimiter ; 如上 like中的MONTH是变量

MySQL 创建存储过程

MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b",返回这两个参数的和. drop procedure if exists pr_add; -- 计算两个数之和 create procedure pr_add (    a int,    b int ) begin    declare c int;    if a is null then       set

MySQL创建存储过程出错

问题描述 MySQL创建存储过程出错 解决方案 答案就在这里:如何在mysql 6.0.2下创建存储过程? 解决方案二: 你确定不是CREATE TABLE ?还有你这截屏这么小?看不清,,,, 解决方案三: 解决方案四: 解决方案五: 不知道,过程怎么创建?

MySQL 创建存储过程详细实例教程(1/9)

mysql教程 创建存储过程 "pr_add" 是个简单的 mysql 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b",返回这两个参数的和. drop procedure if exists pr_add; -- 计算两个数之和 create procedure pr_add (    a int,    b int ) begin    declare c int;    if a is null then       s

MySQL在存储过程的异常处理部分使用多个语句

MySQL在存储过程的异常处理部分使用多个语句 -- 创建测试表格,且没有任何数据 drop table if exists t; create table t(id int); -- 创建存储过程 drop procedure if exists test; delimiter | create procedure test() begin   declare vId int;   -- 游标,没有数据的结果集   declare cTest cursor  for select * from

深入mysql创建自定义函数与存储过程的详解_Mysql

一 创建自定义函数在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题:mysql表结构如下 复制代码 代码如下: DROP TABLE IF EXISTS `test`;CREATE TABLE `test` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `pic` varchar(50) NOT NULL,  `hashcode` varchar(16) N

关于mysql使用存储过程插入大量数据的问题

问题描述 关于mysql使用存储过程插入大量数据的问题 创建数据库 create database ceshi; use ceshi; 创建表 create table ce( id int not null auto_increment, name varchar(50) default null, pw char(50), primary key(id)); 存储过程 delimiter // create procedure insert_ce(in item int) begin dec

mysql-MySql命令行下创建存储过程的语法错误

问题描述 MySql命令行下创建存储过程的语法错误 delimiter // create procedure findEmp() begin select *from emp; end // 在当前数据库下查询表emp,这么简单的语句为啥我死活创建不成功?哪里出错啊? 以下是错误提示: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL